题面如下:机票

抽象出来就是个01背包裸题,选择当前需要的花费就是药水,然后对应增加价值,我提前预处理失败的可获得经验直接加,然后对应的赢获得的价值就是b-a。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4;
long long v[maxn],w[maxn],dp[maxn];
int main()
{
long long ans=0;
int n,x,i,j,t;
cin>>n>>x;
for(i=0;i<n;i++)
{
int a,b,c;
cin>>a>>b>>c;
ans+=a;
v[i]=b-a;w[i]=c;
}
for(i=0;i<n;i++)
{
for(j=x;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
dp[x]+=ans;
cout<<dp[x]*5<<endl;
return 0;
}
这篇博客介绍了一个利用动态规划求解01背包问题的C++代码实现。题目中,每个物品有一定的价值和重量,目标是找到能放入背包且总重量不超过限制的最大价值。博主通过预处理并优化了数据,提高了算法效率。最后输出了最大价值的五倍,以确保结果为整数。
647

被折叠的 条评论
为什么被折叠?



