P1063 能量项链

Miku

区间dp模板,记得longlong

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
long long n;
long long a[201];
long long b[201];
long long dp[201][201];
long long ans;
int main(){
	scanf("%lld",&n);
	for(long long i=1;i<=n;++i){
		scanf("%lld",&a[i]);
		a[n+i]=a[i];
	}
	for(long long i=1;i<=2*n;++i){
		b[i]=a[i+1];
	}
	b[2*n]=a[1];
	for(long long i=2;i<=n;i++){
		for(long long j=1;j+i-1<=2*n;++j)
			for(long long k=j;k<j+i-1;++k){
				dp[j][j+i-1]=max(dp[j][j+i-1],dp[j][k]+dp[k+1][j+i-1]+a[j]*b[j+i-1]*b[k]);	
			}
	}
	for(long long i=1;i<=n+1;++i){
		ans=max(ans,dp[i][i+n-1]);
	}
	cout<<ans;
	return 0;
}
posted @ 2020-08-06 22:25  Simex  阅读(77)  评论(0编辑  收藏  举报