改对了!!!
正确代码
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,f[40][40],root[40][40];
inline int read() {
int x=0; char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x;
}
void print(int l,int r) {
if(l>r) return ;
printf("%d ",root[l][r]);
print(l,root[l][r]-1);
print(root[l][r]+1,r);
}
int main() {
n=read();
for(int i=1;i<=n;i++) {
f[i][i]=read(),root[i][i]=i;
f[i][i-1]=1;
}
for(int i=2;i<=n;i++)
for(int l=1;l+i-1<=n;l++) {//就是循环变量的毛病!!!老毛病了!!!
int r=l+i-1;
for(int k=l;k<=r;k++)
if(f[l][r]<f[l][k-1]*f[k+1][r]+f[k][k]) {
f[l][r]=f[l][k-1]*f[k+1][r]+f[k][k];
root[l][r]=k;
}
}
printf("%d\n",f[1][n]);
print(1,n);
}
```
by MiaoZ @ 2018-12-24 22:07:17
谢谢大佬的代码,对我有很大启发
by 逆流之时 @ 2019-01-29 14:53:16