P1048 采药
医师把辰辰带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,
每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
1. 动态规划(0-1背包)
每个药草是唯一的,它具有耗费时间(容量)的代价,以及价值属性,给定总时间(容量),该问题是0-1背包问题
int maxval(int V,vector<int>&w,vector<int>&c){
int n = w.size();
vector<int> dp(V+1);
int res = 0;
for(int i=0;i<n;i++)
for(int j=V;j>=c[i];j--){
dp[j] = max(dp[j],dp[j-c[i]]+w[i]);
res = max(res,dp[j]);
}
return res;
}