比赛 假期找点事儿做题吧 评测结果 AAAAAAAAAA
题目名称 能量项链 最终得分 100
用户昵称 CSU_Turkey 运行时间 0.004 s
代码语言 C++ 内存使用 0.48 MiB
提交时间 2017-06-09 18:18:04
显示代码纯文本
#include<bits/stdc++.h> 
using namespace std;
const int inf=210;
int n,a[inf],dp[inf][inf],maxx;
int main()
{
	freopen("energy.in","r",stdin);
	freopen("energy.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		a[i]=a[i+n]=x;//多开一倍来处理环上的问题保证每种情况都考虑到 
	}
	for(int l=2;l<=n;l++)//从小到大枚举长度 ,释放能量的最小单位是2个 
	{
		maxx=-1;
		for(int j=1;j<=2*n-l+1;j++)
		{
			int k=j+l-1;
			for(int i=j;i<k;i++)//i如果等于ki+1就大于k所以不能取= 
			{
				dp[j][k]=max(dp[j][k],dp[j][i]+dp[i+1][k]+a[j]*a[i+1]*a[k+1]);
			}
			if(l==n)maxx=max(maxx,dp[j][k]); 
		}
	}
/*	int maxx=-1;
	for(int i=1;i<=n;i++)
	{
		maxx=max(maxx,dp[i][i+n-1]);cout<<maxx<<" ";
	}*/
	/*for(int l=2;l<=n+1;l++)
	{
		for(int i=1;i<=n;i++)
			cout<<dp[i][i+l-1]<<" ";
		cout<<endl;
	}*/
	cout<<maxx;
	return 0;
}