题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=944
题目大意: 给你一个长度为L的木条, 和N个切割点, 每次切割的代价是当前切割木条的长度, 问最小代价是多少。
解题思路: 很显然的区间DP, dp(i, j)表示在i号和j号点之间切割的最小代价。dp转移方程为dp(i, j) = min(dp(i, k)+dp(k,j)+a[j]-a[i])|k属于(i, j)
代码:
#include #include #include #include #include
View Code 思考: 这道题本身没有多难, 但是要注意的地方有很多, 比如说一定要注意转移的方向, 在算转移方程的左侧的时候一定要保证方程的右侧已经算了出来, 就比如说这道题, 想要计算区间(i, j)就必须保证我这个区间内所有只需要切割一下的, 就是说中间隔了一个点的要全部都算出来, 然后才能算隔两个点的, 隔三个点的.......否则,如果像我一开始想的先枚举两个端点, 再枚举中间点, 就只能那函数做了, 但是我们现在锻炼的是动态规划的思维......