测试数据太水
查看原帖
测试数据太水
499177
duanxinghe楼主2022/8/28 14:20
#include<bits/stdc++.h>
using namespace std;
int n,f[31],dp[101][101],m[31][31];
void dfs(int l,int r) {
	if(l>r) return;
	if(l==r) {
		cout<<l<<' ';
		return ;
	}
	cout<<m[l][r]<<' ';
	dfs(l,m[l][r]-1);
	dfs(m[l][r]+1,r);
}
int main() {
	cin>>n;
	for(int i=1; i<=n; i++) cin>>f[i];
	for(int i=1; i<=n; i++) {
		dp[i][i]=f[i];
		dp[i][i-1]=1;
	}
	for(int i=n; i>=1; i--) {
		for(int j=i+1; j<=n; j++) {
			for(int k=i; k<=j; k++) {
				int cnt=dp[i][k-1]*dp[k+1][j]+dp[k][k];
				dp[i][j]=max(dp[i][j],cnt);
				if(dp[i][j]==cnt) m[i][j]=k;
			}
		}
	}		
	cout<<dp[1][n]<<endl; 
	dfs(1,n);
	return 0;
}
2022/8/28 14:20
加载中...