动态规划
采药
https://ac.nowcoder.com/acm/problem/16650
思路:动态规划的背包问题。建立二维数组dp[i][j]表示前i个物品不超过j时采到的草药的最大总价值。dp[i][j]=max(dp[i-1][j],dp[i-1][j-V[i]]+V[i]*W[i]) 特殊情况:当j<v[i]时,dp[i][j]=dp[i-1][j]。
注意:可以不用初始化,当申请的数组为全局数组,不赋值默认值为0;
#include "iostream" using namespace std; int V[101]; int W[101]; int dp[101][1001]; int main() { int T,n,i,x; cin>>T>>n; for(i=1;i<=n;i++){ cin>>V[i]>>W[i]; } for(i=1;i<=n;i++){ for(int j=1;j<=T;j++){ if(V[i]>j){ dp[i][j]=dp[i-1][j]; }else dp[i][j]=max(dp[i-1][j],dp[i-1][j-V[i]]+W[i]); } } cout<<dp[n][T]; }