• HDU 4293 Groups


           模型挺好的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
    ", dp[n]);
        }
    }
    


  • 相关阅读:
    gulp备忘
    好文收藏
    妙味H5交互篇备忘
    [CSS3备忘] transform animation 等
    css选择器总结
    flexbox备忘
    函数
    继承2
    在 Swift 中实现单例方法
    浅谈 Swift 中的 Optionals
  • 原文地址:https://www.cnblogs.com/james1207/p/3306314.html
Copyright © 2020-2023  润新知