HDU 4293 Groups

系统 1805 0

       模型挺好的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]);

    }

}


  


 

 

HDU 4293 Groups


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论