A,B,C水题。
D 描述:求一个树中的两条点不相交路径,使得两条路径长度乘积最大。
为使路径不相交,可以将树分成两部分,分别求出各部分的最长路径。具体做法迭代删去树中一条边,得到两个新树,分别用dfs求出新树中的最长路径求值即可。
附:SPOJ的6717是这道题的升级版
E 描述:数列{A[1],A[2],…A[n]}中每项取值范围是{1,2,3,4}。定义:峰为满足A[i] > A[i-1], A[i+1]的项,谷为满足A[i]<A[i-1],A[i+1]的项。求任意连续两项不相等,且有t个峰,t-1个谷的数列个数。
所谓有t个峰,t-1个谷意味着数列有2t个单调区间,且第一个单调区间为增区间。这样考虑的话,在添加项的时候只需要考虑前面的项。
则可设状态F[i][j][k]表示有i项,j个单调区间,A[i]=k时共有多少解。可以通过j的奇偶性判断最后一段单调区间的增减性,继而再根据新添加的项l与k的大小关系判断是否增加了新的单调区间,确定状态转移。