把第二层循环倒过来
by star_magic_young @ 2018-07-09 20:59:55
@[star_magic_young](/space/show?uid=38372) 我这个开了两维的数组,所以顺序无所谓,改成这样就可以过了
```
for(int i=1; i<=M; i++)
for(int j=0; j<=T; j++){
f[i][j]=f[i-1][j];
if(j-v[i]>=0)
f[i][j]=max(f[i-1][j], f[i-1][j-v[i]]+w[i]);
}
```
by Ichigaya_Arisa @ 2018-07-09 21:03:56
差不多@[Ichigaya_Arisa](/space/show?uid=70850)
by star_magic_young @ 2018-07-09 21:09:18
@[Ichigaya_Arisa](/space/show?uid=70850) j + v[i] > T 导致访问到野指针。。应该是re或者tle或者其他的。。
by moye到碗里来 @ 2018-07-09 21:11:08
或者wa。。因为覆盖到了之后的内存空间。。
by moye到碗里来 @ 2018-07-09 21:13:01
@[moye到碗里来](/space/show?uid=52576) 实际上的话样例都过不了,按样例是访问不到野指针的
by Ichigaya_Arisa @ 2018-07-09 21:15:15
@[Ichigaya_Arisa](/space/show?uid=70850) 那这个可能是初值的问题。。我也不清楚了。。我觉得改成
```
if(j + v[i] <= 0)
f[i][j + v[i]]=max(f[i-1][j + v[i]], f[i - 1][j] + w[i]);
```
也能过阿。。
by moye到碗里来 @ 2018-07-09 21:21:13
<= T
by moye到碗里来 @ 2018-07-09 21:21:32
@[moye到碗里来](/space/show?uid=52576) 然而事实上这样写过不了TAT,这道题的话怎么输出都会是0,那个gift的话能过前30分的点
by Ichigaya_Arisa @ 2018-07-09 21:30:32
@[Ichigaya_Arisa](/space/show?uid=70850) 我写一个你看看呢。。
by moye到碗里来 @ 2018-07-09 21:31:07