石子合并

#include<limits>
using namespace std;
const int N = 1e3;
int a[N];
int f[N][N];//f[i][j]表示的是将[i,j]区间所有石子合并成一堆所用代价最小集合
int main()
{
    int n;
    cin >>n;
    for(int i = 1; i <= n; i ++)
    {
      cin >>a[i];
      a[i] += a[i - 1];
    }
    for(int l = 2; l <= n; l ++)
    for(int i = 1; i + l - 1 <= n; i ++)
    {
        int j = l + i - 1; 
        f[i][j] = 1e8;
        for(int k = i; k < j; k ++)//[i,k],[k + 1, j]区间
        {
            f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j] + a[j] - a[i - 1]);
        }
    }
    cout << f[1][n];
}
全部评论

相关推荐

Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务