比赛 |
假期找点事儿做题吧 |
评测结果 |
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;
}