【UOJ#311】【UNR #2】积劳成疾(动态规划)
Solution
考虑最大值分治解决问题。每次枚举最大值所在的位置,强制不能跨过最大值,左右此时不会影响,可以分开考虑。
那么设(f[i][j])表示长度为(i),且最大值不超过(j)的所有方案之和。
因为最大值有多个,所以我们钦定每次选择最靠右的那个,所以转移就是:
[f[i][j]=f[i][j-1]+sum_{k=1}^if[k-1][j]*f[i-k][j-1]*w[j]^{c}
]
即钦定为最靠右的那个最大值后,左侧可能还有相等的最大值,所以是(f[k-1][j]),右侧则所有值都小于当前位置,即(f[i-k][j-1]),至于那个(c)是啥就自己算算吧。
提交记录