细思极恐……
查看原帖
细思极恐……
125124
ywy_c_asm楼主2019/4/14 16:18

rt,众所周知第二维和sizesize相关的树形背包做卷积转移可以做到O(nk)O(nk)或者nknk同阶可以做到O(n2)O(n^2),然而我一直以来的写法都是这样的:

size[pt]+=size[child];size[pt]+=size[child];

for(i=min(k,size[pt]);i>=0;i)for(i=min(k,size[pt]);i>=0;i--)

   for(j=0;j<=min(i,size[child]);j++)\space\space\space for(j=0;j<=min(i,size[child]);j++)

      dp[pt][i]+=dp[pt][ij]dp[child][j];\space\space\space\space\space\space dp[pt][i]+=dp[pt][i-j]*dp[child][j];

这样的复杂度是错的……我在这题的第9个点上T了半天,后来自己造了条链把我卡了……真正的写法应该是在合并ptptchildchild两棵子树的时候进行min(k,size[pt])min(k,size[child])min(k,size[pt])*min(k,size[child])次循环,这种写法则是min(k,size[pt]+size[child])min(k,size[child)min(k,size[pt]+size[child])*min(k,size[child)次循环,在链上就被卡成O(nk2)O(nk^2)了……

话说我之前做的所有这样的题我都是这么写的,但是竟然直到今天才被卡掉……

2019/4/14 16:18
加载中...