搜索RE求助
查看原帖
搜索RE求助
432183
JoeBiden2020楼主2021/7/17 10:33
#include<bits/stdc++.h>
using namespace std;
int a[105],f[105][105],n,ans;
int dfs(int l,int r) {
	int maxn,lsum,rsum;
	for(int i=1; i<=r; i++) {
		maxn=0;
		lsum=rsum=1;
		if((i-1)-l>0) {
			lsum=dfs(l,i-1);//枚举左子树
		}
		if(r-(i+1)>0) {
			rsum=dfs(i+1,r);//枚举右子树
		}
		if(maxn>lsum*rsum+a[i]) {
			maxn=lsum*rsum+a[i];
			f[l][r]=i;//记录
		}
	}
	return maxn;
}
void print(int l,int r) {
	int k=f[l][r];
	cout<<f[l][r]<<" ";
	if((k-1)-l>0) {
		print(l,k-1);
	}
	if(r-(k+1)>0) {
		print(k+1,r);
	}
}
int main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
	}
	ans=dfs(1,n); 
	cout<<ans<<endl;
	print(1,n);
	return 0;
}
2021/7/17 10:33
加载中...