石子合并(相邻合并)

题目传送门

#include<bits/stdc++.h>
using namespace std;
#define max(a,b) a>b?a:b
#define min(a,b) a>b?b:a
int n;int a[1001];int g[1001][1001];

int main()
{
    cin>>n;
    memset(g,0x3f,sizeof(g));
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]+=a[i-1];
        g[i][i]=0;
    }
    for(int len=2;len<=n;len++)
	{
		for(int i=1;i<=n-len+1;i++)
		{
			int j=i+len-1;
			for(int k=i;k<j;k++)
			{
				g[i][j]=min(g[i][j],g[i][k]+g[k+1][j]+a[j]-a[i-1]);
			}
		}
	}
    cout<<g[1][n]<<endl;
    return 0;
}

本文作者:邓佑孤

本文链接:https://www.cnblogs.com/Arc-ux/p/18581347

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   邓佑孤  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑