代码:(附个人理解)
#include<bits/stdc++.h>
using namespace std;
int ti[105];
int v[105];
int dp[105][1005];
int main(){
int t,m;
scanf("%d %d",&t,&m);
for (int i=1;i<=m;i++){
scanf("%d %d",&ti[i],&v[i]);
}
for (int i=1;i<=m;i++){//采药编号记录数组
for (int j=1;j<=t;j++){//j:时间记录变量;
if (j>ti[i]){//如果时间够采这第i株草药
dp[i][j]=max(dp[i-1][j],dp[i-1][j-ti[i]]+v[i]);//重点! 第一种是不采,i-1继续遍历,第二种采,则i-1,j减去时间加上价值(这是本程序的核心语句,牢记);
}
else{//如果采这株草药的时间不够
dp[i-1][j];//直接跳到下一株
}
}
}
printf("%d",dp[m][t]);
return 0;
}
求指点