1 条题解
-
0
自动搬运
来自洛谷,原作者为

龘龘龘龘龘龘
**搬运于
2025-08-24 21:25:51,当前版本为作者最后更新于2017-08-05 11:01:45,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
//这一题和01背包大径相同,只要考虑清楚其中的关系,直接就可以套用01背包中f[j]=max{f[j],f[j-a[i]]+c[i]然后因为有两个关键变量所以设一个二维数组f[j][l];然后f[l]也可以直接套用上面那个公式,只要稍微变动一下就行了,这就不说了;
鄙人是个新手昨晚8.00才正式学背包,代码有点不清楚的请多多包涵;
以下是代码,请各位笑纳:
#include<iostream> using namespace std; int a[51],b[51],c[51];//题目中有三个变量就设三个变量; int f[501][501]; int main() { int i,j,l,m,n,k; cin>>m>>n>>k;//输入 for(i=1;i<=k;i++) cin>>a[i]>>b[i]>>c[i];//表示每个食品的体积质量和卡路里; for(i=1;i<=k;i++) for(j=m;j>=a[i];j--) for(l=n;l>=b[i];l--)//记住j和l不能同时写在一起,刚开始我就写在一起,调了1分钟才发现 f[j][l]=max(f[j][l],f[j-a[i]][l-b[i]]+c[i]);//公式;直接套用就是的 cout<<f[m][n];//输出最优解 return 0; }
- 1
信息
- ID
- 500
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者