for(ll j=min(m,siz[u]);j>=0;--j)
{
ll sum=-1;
for(ll k=min(j,siz[to]);k>=0;--k)
{
if(j-k>siz[u]-siz[to]) continue;//判断
ll val=w[i]((m-k)(k)+(n-m-siz[to]+k)*(siz[to]-k));
sum=max(sum,f[u][j-k]+f[to][k]+val);
}
f[u][j]=max(f[u][j],sum);
我这种写法也能过(由于判断步骤调用数组,所以过不了sub2数据)。之所以要加一步判断,是因为j与k相互独立,致使j-k可能超过答案有效范围(即合并前的siz[u],现在的siz[u]-siz[to]).