0分求调
查看原帖
0分求调
995192
xiaogu111楼主2024/8/22 15:23
#include<iostream>
using namespace std;
int n,a[50],dp[50][50],root[50][50]; 
void dfs(int x,int y)
{
   int t=root[x][y];
   cout<<t<<" ";
   dfs(x,t-1);
   dfs(t+1,y);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    for(int i=1;i<=n;i++)
    {
		dp[i][i]=a[i];
		root[i][i]=i; 
	}

	for(int i=1;i<=n;i++)
		for(int l=1;l+i-1<=n;l++)
		{
			int r=l+i-1;
			int temp,maxx=-0x3f3f3f3f; 
			for(int k=l;k<=r;k++)
			{
				if(k==l)
					temp=max(dp[l][r],a[k]+dp[k+1][r]);
				else if(k==r)
					temp=max(dp[l][r],a[k]+dp[l][k-1]);
				else
					temp=max(dp[l][r],a[k]+dp[l][k-1]*dp[k+1][r]);
				if(temp>maxx)
				{
					maxx=temp;
					root[l][r]=k;	
				} 
			}
			dp[l][r]=maxx;
		}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			cout<<root[i][j]<<" ";
		cout<<endl;
	}
	cout<<dp[1][n]<<endl;
	dfs(1,n); 
    return 0;
}
2024/8/22 15:23
加载中...