改一下循环就A了?

P1273 有线电视网

第二种情况下,j>原来的sum,后面的式子是没有意义的.所以会WA
by SofanHe @ 2018-03-17 20:28:36


@[多功能的荀彧](/space/show?uid=43931) 但我是用现在的sum、j和子树的数据更新原来的dp数组啊,为什么会没有意义呢?
by p_b_p_b @ 2018-03-20 17:24:20


```cpp int dfs(int x)//WA了 { if (x>n-m) return 1; register int i,j,k,sum=0; for (i=head[x];i;i=edge[i].nxt) { int sz=dfs(edge[i].t); memset(tmp,0,sizeof(tmp)); for (j=0;j<=sum;j++) tmp[j]=dp[x][j]; sum+=sz; for (j=1;j<=sum;j++) for (k=1;k<=sz&&k<=j;k++) dp[x][j]=max(dp[x][j],tmp[j-k]+dp[edge[i].t][k]-edge[i].w); } return sum; } ``` k=1时,你的tmp[j-k]有意义吗?
by SofanHe @ 2018-03-20 17:27:07


@[p_b_p_b](/space/show?uid=76481) ↑
by SofanHe @ 2018-03-20 17:27:19


@[多功能的荀彧](/space/show?uid=43931) k=1时,原来遍历过的子树取(j-1)个用户,当前子树内取一个用户,再减去路的权值,取max,不就是j个用户时赚的钱的最大值吗? 请原谅我是个蒟蒻QAQ
by p_b_p_b @ 2018-03-20 21:05:08


@[p_b_p_b](/space/show?uid=76481) temp[j-1]在原始意义上是不应该存在的,因为没有j-1个用户
by SofanHe @ 2018-03-20 21:11:51


@[多功能的荀彧](/space/show?uid=43931) 哦!懂了!谢谢大佬!%%%
by p_b_p_b @ 2018-03-20 21:25:31


所以你的完全背包是怎么过的。。按理说应该倒序背包容量。。
by Starrydream @ 2018-10-24 19:55:51


|