讲一下我想的算法吧...
刚开始就是搜 加了几个剪枝、记忆搜索,还是超时
最后想想用类似上次客户端-服务器的那个树型DP
/*
f[i][j][0]保存对于节点i向其子树走j步(可能有点重复)摘到的最多苹果数
f[i][j][1]保存对于节点i向其子树走j步 并且返回到i节点 摘到的最多苹果数
对于叶节点 f[i][0][0/1]=apNum[i];
对于其它节点f[i][j][0]=max{j-2*p-1步,其中p个子树返回,1个子树不需要返回,所得到最多苹果数,p不定};
f[i][j][1]=max{j-2*p步,p个子树都返回,所得到的最多苹果数,p不定}
这两步中间过程都需要DP 复杂度=j*子树个数(<n)
那么最终结果就是f[1][k][0]
整个大的DP时间复杂度<n*(k*n)<2*10^6
树型DP中套小DP
*/
实现起来好累哎。。。