嗯,本蒟蒻刚开始学动态规划就碰上难点了。先说下我的思路:我用dp[i]代表t从0到i时刻,能获得的最大价值。于是乎dp[i]= max(dp[i-t[i]]+v[i]).然而这个思路好像是错的,我想知道错在哪了(所以不要和我讲这题用二维dp[i][j]来表示什么的)代码如下:
typedef struct Stuff
{
int t, v;
} Stuff;
Stuff s[1002];
for(int i=1;i<=T;++i){
ll mmax=0;
for(int j=0;j<M;++j){
if(i>=s[j].t){
ll tmp=dp[i-s[j].t]+s[j].v;
mmax=mmax>tmp?mmax:tmp;
}
}
dp[i]=mmax;
}
举例:
2 3
1 2
5 6
10 2
t=0 dp[0]=0
t=1 dp[1]=max(dp[0]+2)=2
t=2 dp[2]=max(dp[0]+3,dp[1]+2)=4
t=3 dp[3]=max(dp[1]+3,dp[2]+2)=6
.....
t=10 dp[10]=max(dp[8]+3,dp[9]+2,dp[5]+6,dp[0]+2)