描述
如果你是辰辰,你能完成这个任务吗?
70 3 71 100 69 1 1 2
3
这道题为标准的01背包问题,每种物品只有一个,每个物品只有选跟不选两种的情况,用一个数组表示t时间可采草药的最大价值。要是不选第i个物品的话,则最大价值还是f(t);要是选的话,则最大价值为f(t-T[i])+M[i]以此循环求值。
源代码如下:
#include<bits/stdc++.h>
using namespace std;
struct yao
{ int a;
int b;
}c[101];
int main()
{ int f[1001]={0},i,j,t,m;
cin>>t>>m;
for(i=0;i<m;++i)
cin>>c[i].a>>c[i].b;
for(i=0;i<m;++i)
for(j=t;j>=c[i].a;--j)
if(f[j]<f[j-c[i].a]+c[i].b)
f[j]=f[j-c[i].a]+c[i].b;
cout<<f[t]<<endl;
}
本文通过详细解析一道动态规划题目——03:采药,深入探讨动态规划的思路与解题方法。通过实例分析,帮助读者理解如何构建状态转移方程,优化求解过程,提升解决类似问题的能力。

978

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



