【每日DP】day1 P1802 5倍经验日(别样的01背包)难度⭐★

题目链接
在这里插入图片描述
输入

6 8
21 52 1
21 70 5
21 48 2
14 38 3
14 36 1
14 36 2

输出

1060

一道有点意思的01背包,可以帮助理解。好久没写DP了,每天一道DP,从基础学起,正好复习一下。
这道题不同之处在于失败了(不拿走这件东西)也会有收益,所以就在正常的倒序一维01背包的基础之上,如果背包容量小于当前的物品的重量,也要加上 l o s e [ i ] lose[i] ,以及别忘了题中的五倍经验。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e4+7;
const ll mod=2147483647;
ll n,m,a[N],b[N],c[N],f[N],maxx;
int main()
{
    scanf("%lld %lld",&n,&m);
    for(int i=1;i<=n;++i)
        scanf("%lld %lld %lld",&a[i],&b[i],&c[i]);
    for(int i=1;i<=n;++i)
    {
        for(int j=m;j>=c[i];--j)
        {
            f[j]=max(f[j]+a[i]*5,f[j-c[i]]+b[i]*5);
        }
        for(int j=c[i]-1;j>=0;--j)
        {
            f[j]+=a[i]*5;
        }
    }
    printf("%lld\n",f[m]);
    return 0;
}

有任何疑问欢迎评论哦虽然我真的很菜
点个关注再走吧

发布了110 篇原创文章 · 获赞 92 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45697774/article/details/104866388
今日推荐