题解 | #小竹与妈妈#

小竹关禁闭

https://ac.nowcoder.com/acm/contest/45670/C

C小竹关禁闭
大佬都是从前面开始dp的,只有我傻傻的从后面开始dp。
这里定义一个三维的状态(反正不会爆空间)
f[i][j][k]
表示第i个物品,j是选不选i,k是后面m(也就是k)个位置中选还是不选 然后就是丑陋的代码

cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=n;i>=1;i--) {
        for(int j=n;j>i;j--) {
            //这个物品选,那后面的只能不选
            if(j-i>m)f[i][1][1]=max({f[i][1][1],f[j][1][1],f[j][0][0],f[j][0][1]});
            else f[i][1][1]=max({f[i][1][1],f[j][0][0]});
            
            //这个物品不选,但是后面m个里面也不选
            if(j-i>m)f[i][0][0]=max({f[i][0][0],f[j][1][1],f[j][0][0],f[j][0][1]});
            else f[i][0][0]=max({f[i][0][0],f[j][0][0]});
            
            //这个物品不选,但是后面m个里面选
            if(j-i>m)f[i][0][1]=max({f[i][0][1],f[j][1][1],f[j][0][0],f[j][0][1]});
            else f[i][0][1]=max({f[i][0][1],f[j][1][1],f[j][0][1]});
        }
        f[i][1][1]+=a[i];//最后选的要加上自己
    }
    cout<<max({f[1][1][1],f[1][0][1],f[1][0][0]});
全部评论

相关推荐

Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
猫头夜鹰:图书管理系统能有面试就怪了,放十年前都不行
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务