很容易想到枚举第一步切掉的边,然后再计算能够产生的最大值. 联想到区间DP,令dp[i][l][r]为第一步切掉第i条边后从第i个顶点起区间[l,r]能够生成的最大值是多少. 但是状态不好转移,因为操作的符号不仅有‘+’,还有‘*’,加法的话,父区间的最大值显然可以从子区间的最大值相加得出. 乘法的话,父区间的最大值除了由子区间的最大值相乘得出,还可以由子区间的最小值相乘得出. 所以,多定义一维状态. dp[i][l][r][flag]表示第一步切掉第i条边后从第i个顶点起区间[l,r]能够生成…