求助,只过了仨QWQ
查看原帖
求助,只过了仨QWQ
672837
DaShabby楼主2023/8/1 10:56
#include<bits/stdc++.h>
#define x first
#define y second 
#define inf 0x3f3f3f3f
#define lowbit(x) ((x)&(-x))
#define lson node<<1
#define rson node<<1|1
#define now_node int l,int r,int node
#define l_node l,mid,lson
#define r_node mid+1,r,rson
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
const int maxn=5e5+23;
int tot,cnt,idx;
int a[maxn];
int dp[500][500];
int dfs(int l,int r){
//还要考虑左区间或者右区间只有2个数 
	if(dp[l][r])return dp[l][r];
	if(l==r||l==r-1)return 0;
	if(r==l+2)return a[l]*a[r-1]*a[r];
	//接下来区间长度至少为4
	dp[l][r]=max(dp[l][r],a[l]*a[l+1]*a[r]+dfs(l+1,r));
	dp[l][r]=max(dp[l][r],a[l]*a[r-1]*a[r]+dfs(l,r-1)); 
	for(int mid=l+1;mid<=r-2;mid++){
		int MAX=max(a[l]*a[mid+1]*(a[mid]+a[r]),a[r]*a[mid]*(a[mid+1]+a[l]));
		dp[l][r]=max(dp[l][r],dfs(l,mid)+dfs(mid+1,r)+MAX);
	}
	return dp[l][r];
}
void work(){
	int n,m;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		a[i+n]=a[i];
	}
//	a[2*n+1]=a[1];
	int MAX=0;
	for(int i=1;i<=n;i++){
		MAX=max(MAX,dfs(i,i+n));
	}
	printf("%d\n",MAX);
}
int main()
{
	int t=1;
//	scanf("%d",&t);
	while(t--)
	work();
	return 0;
}
2023/8/1 10:56
加载中...