记录编号 |
248387 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2006]能量项链 |
最终得分 |
100 |
用户昵称 |
AntiLeaf |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2016-04-10 14:08:02 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
namespace mine{
int c,x,a[110],i,j;
bool neg;
inline int getint(){
x=neg=0;
do c=getchar();while(c==' '||c=='\n'||c=='\r'||c=='\t');
if(c=='-'){
neg=true;
c=getchar();
}
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
if(neg)return -x;
return x;
}
inline int fgeti(FILE* fin){
x=neg=0;
do c=fgetc(fin);while(c==' '||c=='\n'||c=='\r'||c=='\t');
if(c=='-'){
neg=true;
c=fgetc(fin);
}
for(;c>='0'&&c<='9';c=fgetc(fin))x=(x<<1)+(x<<3)+(c^48);
if(neg)return -x;
return x;
}
inline void putint(int x){
neg=x<0;
if(neg)x=-x;
i=0;
do{
a[i++]=x%10+48;
x/=10;
}while(x);
if(neg)putchar('-');
for(j=i-1;j>=0;j--)putchar(a[j]);
}
inline void fputi(FILE* fout,int x){
neg=x<0;
if(neg)x=-x;
i=0;
do{
a[i++]=x%10+48;
x/=10;
}while(x);
if(neg)putchar('-');
for(j=i-1;j>=0;j--)fputc(a[j],fout);
}
inline void fputi(int x,FILE* fout){
neg=x<0;
if(neg)x=-x;
i=0;
do{
a[i++]=x%10+48;
x/=10;
}while(x);
if(neg)putchar('-');
for(j=i-1;j>=0;j--)fputc(a[j],fout);
}
inline void put(const char* s){
x=strlen(s);
for(i=0;i<x;i++)putchar(s[i]);
}
inline void fput(FILE* fout,const char* s){
x=strlen(s);
for(i=0;i<x;i++)fputc(s[i],fout);
}
inline void fput(const char* s,FILE* fout){
x=strlen(s);
for(i=0;i<x;i++)fputc(s[i],fout);
}
inline void puts(const char* s){
x=strlen(s);
for(i=0;i<x;i++)putchar(s[i]);
putchar('\n');
}
inline void fputs(FILE* fout,const char* s){
x=strlen(s);
for(i=0;i<x;i++)fputc(s[i],fout);
fputc('\n',fout);
}
inline void fputs(const char* s,FILE* fout){
x=strlen(s);
for(i=0;i<x;i++)fputc(s[i],fout);
fputc('\n',fout);
}
}
const int maxn=210;
int MAIN();
int haha=MAIN();
int f[maxn][maxn],n,a[maxn];
int main(){;}
inline int MAIN(){
#define COGS
#ifdef COGS
freopen("energy.in","r",stdin);
freopen("energy.out","w",stdout);
#endif
n=mine::getint();
for(int i=1;i<=n;i++)a[i]=a[i+n]=mine::getint();
for(int d=2;d<=(n<<1);d++)for(int i=1;i<=(n<<1)-d+1;i++){
int j=i+d-1;
for(int k=i;k<j;k++)f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]);
}
//for(int i=2*n;i>=1;--i)for(int j=i+1;j<=2*n;++j)for(int k=i;k<j;++k)f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]);
int temp=0;
for(int i=1;i<=n;i++)temp=max(temp,f[i][i+n-1]);
mine::putint(temp);
return 0;
}