石子合并 20分 求调
查看原帖
石子合并 20分 求调
1305371
zyc12345678楼主2025/7/23 15:04
#include <bits/stdc++.h>
#define ll long long
#define loop(i,x,y) for(int i=x;i<=y;i++)
#define loopd(i,x,y) for(int i=x;i>=y;i--)
using namespace std;
const int N=330;
int a[N],d[N][N],p[N][N],w[N][N];

int main()
{
	int n;cin>>n;
	loop(i,1,n)cin>>a[i];
	loop(i,1,n)
		loop(j,i,n) w[i][j]=w[i][j-1]+a[j];
	loop(L,1,n-1)
	{
		for(int i=1;i+L<=n;i++)
		{
			int j=i+L;d[i][j]=0x3f3f3f3f;
			loop(k,i,j-1)
				d[i][j]=min(d[i][k]+d[k+1][j],d[i][j]-1);
			d[i][j]+=w[i][j];
			
		}
	}
	loop(L,1,n-1)
	{
		for(int i=1;i+L<=n;i++)
		{
			int j=i+L;
			p[i][j]=-1;
			loop(k,i,j-1)
				p[i][j]=max(p[i][k]+p[k+1][j],p[i][j]);
			p[i][j]+=w[i][j];
			
		}
	}
	cout<<d[1][n]<<'\n'<<p[1][n];





	return 0;
}
2025/7/23 15:04
加载中...