题目链接:
题意:给出n堆石子,每次合并相邻的两堆石子,代价为这两堆石子的重量和,把所有石子合并为一堆,求最小代价。
思路:原始的DP方程为:f[i][j]=min(f[i][k]+f[k+1][j]+sum[j]-sum[i-1])。这个方法在这里是超时的。可以ac的解法是这样,道理目前不清楚:
(1)每次找到一个最小的i使得A[i-1]<=A[i+1],将A[i-1]和A[i]合并为temp
(2)找到前面一个最大的j使得A[j]>temp,将temp放在j之后。
(3)重复1,2,直到剩余的堆数为1。
#include #include #include #include #include #include #include #include #include #include #include