题目
描述
在一个环形跑道上有N堆石子,每次取相邻两堆进行合并
最终合并成为一堆。请问将每次合并后的代价进行累加
其总和最少为多少
输入
第一行为石子堆数N,N<=200
第二行到第N行,每行一个正整数代表石子数,其小于10000
输出
一行,表示最小的总得分
样例
输入
4
4
5
9
4
输出
43
此题是典型的合并类DP,板子题,它和石子合并1所不同的是这次的跑道是环状的,也就是首尾相连,最后一个可以和最开始一个合并了。
所以我们可以将数组开成双倍的,从而达到环的效果。
借此机会复习一下合并DP的基本思路
可以转化为:
像这样,继续分下去,就会到k=i或j-k可以直接合并的情况了。
参考代码一篇:
#include <bits/stdc++.h>
using namespace std;
int n, a[405], sum[405];
int dp[405][405], ans =