题目:
题意:
山洞中有m种草药,每种草药有各自的价值以及采摘需要的时间,现在你有总共为T的时间可以来采药,问在规定的时间内可以采到的草药的最大总价值。
分析:
一道经典的01背包的题目,定义第i株草药的价值为,采摘其所需要的时间为,表示采第i株药,花费时间j可以采到的草药的最大总价值。易得状态转移方程:
代码:
#include<bits/stdc++.h>
using namespace std;
int t,m;
int f[1000010],w[110],v[110];
int main()
{
scanf("%d %d",&t,&m);
for (int i=1;i<=m;i++){
scanf("%d %d",&w[i],&v[i]);
}
for (int i=1;i<=m;i++){
for (int j=t;j>=w[i];j--){
f[j]=max(f[j],f[j-w[i]]+v[i]);
}
}
printf("%d",f[t]);
}