求大佬帮助,第一次遇到DP会有些对有些错!!!

P1064 [NOIP2006 提高组] 金明的预算方案

@[wangjiachi](/space/show?uid=67418) 那个f[0][0]=1和除十的意义何在?前一个貌似就是多余的(有可能就是错在这了),后一个由于空间足够所以可有可无。
by Loner_Knowledge @ 2018-01-12 00:45:16


@[Loner\_Knowledge](/space/show?uid=78044) 先谢谢大佬!!!不过这样也不对,只多了10分,就很尴尬,不过谢谢啦!!!!
by wangjiachi @ 2018-01-14 14:06:05


@[wangjiachi](/space/show?uid=67418) 找到错误了,num的锅,删去即可,读入时不能离散化,遍历到几就得存在w[几]和jz[几],否则可能附件和主件对不上。
by Loner_Knowledge @ 2018-01-14 17:05:06


@[Loner\_Knowledge](/space/show?uid=78044) 可以看看[这个帖子](https://www.luogu.org/discuss/show/30190)。
by Loner_Knowledge @ 2018-01-14 20:32:35


@[wangjiachi](/space/show?uid=67418) @错了,可以看看[这个帖子](https://www.luogu.org/discuss/show/30190)。
by Loner_Knowledge @ 2018-01-15 19:23:29


@[Loner\_Knowledge](/space/show?uid=78044) 先谢谢!!!!我第一次是用N的,但后来不对,看那个帖子也不是很懂,可不可以再解释下,好像不是主件在附件之前输入的问题
by wangjiachi @ 2018-01-16 18:33:21


@[wangjiachi](/space/show?uid=67418) 不是那里的锅,是这几行的锅: ```cpp f[i][j]=max(f[i-1][j],f[i-1][j-w[i][0]] +jz[i][0]); if(j>=(w[i][0]+w[i][1])) f[i][j]=max(f[i-1][j],f[i-1][j-w[i][0]-w[i][1] ] +jz[i][0] +jz[i][1]); if(j>=(w[i][0]+w[i][2])) f[i][j]=max(f[i-1][j],f[i-1][j-w[i][0]-w[i][2] ] +jz[i][0] +jz[i][2]); if(j>=(w[i][0]+w[i][1]+w[i][2])) f[i][j]=max(f[i-1][j],f[i-1][j-w[i][0]-w[i][1]-w[i][2] ] +jz[i][0] +jz[i][1] +jz[i][2]); ``` 后三行应该是与f[i][j]比较最大值,因为在此时f[i-1][j]不一定等于f[i][j]。 另外关于你的疑问是这样的,主件的编号并不是连续的,像1,2,3,4,5,6这样,而是有可能这样1,2,5,7,8,9这样存储。
by Loner_Knowledge @ 2018-01-16 19:49:32


@[Loner\_Knowledge](/space/show?uid=78044) 谢谢!!!!!这样就过了!!!其实我自己想的是f[i][j],然后我们老师让我改成f[i-1][j];就很尴尬【手动苦笑】;谢谢!!!!!
by wangjiachi @ 2018-01-16 20:07:47


@[Loner\_Knowledge](/space/show?uid=78044) 加个qq呗 1223761954
by wangjiachi @ 2018-01-16 20:09:11


|