HDU 4293 Groups

来源:互联网 发布:在线服装搭配软件 编辑:程序博客网 时间:2024/05/22 06:05

       模型挺好的dp题,其实这道题就是建一个模型然后就很容易想到递推过程了,我们可以把每个人的描述,存到数组a中,a[l][r]表示左边有l个,到第r个这个人所在一层停止。。。然后就可以写出转移状态方程了。注意如果dp[i]>dp[j] && i < j  则需要把dp[j]更新为dp[i]。

#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#define LL long long#define CLR(a, b) memset(a, b, sizeof(a))using namespace std;const int N = 555;int a[N][N], dp[N];int main(){    //freopen("input.txt", "r", stdin);    int n, i, j, l, r;    while(scanf("%d", &n) != EOF)    {        CLR(a, 0);        CLR(dp, 0);        for(i = 0; i < n; i ++)        {            scanf("%d%d", &l, &r);            a[l][n - r] ++;        }        for(i = 0; i < n; i ++)        {            for(j = n - i - 1; j >= 0; j --)            {                dp[n - j] = max(dp[n - j], dp[i] + min(n - j - i, a[i][n - j]));                dp[n - j] = max(dp[n - j], dp[n - j - 1]);            }        }        printf("%d\n", dp[n]);    }}


原创粉丝点击