40分Wa,一维dp的思路
查看原帖
40分Wa,一维dp的思路
345837
空木秋人楼主2020/10/23 15:01

嗯,本蒟蒻刚开始学动态规划就碰上难点了。先说下我的思路:我用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)

2020/10/23 15:01
加载中...