题目:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200727152436149.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjcyMTQxMg==,size_16,color_FFFFFF,t_70)
分析:被二叉树,X序遍历吓着了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200727152451506.png)
代码:傻了,写成了先序
#include<bits/stdc++.h>
using namespace std;
int n;
int A[40];
int D[40][40];
int f(int x,int y)
{
if(x==y) return A[x];
if(x+1==y) return A[x]+A[y];
for(int i=x;i<y;i++)
{
D[x][y]=max(D[x][y],A[x]+f(x,i)*f(i+1,y));
}
return D[x][y];
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>A[i];
}
memset(D,-1,sizeof(D));
cout<<f(0,n-1);
}
妈耶,输出把自己想迷糊了,放弃输出顺序了。
#include<bits/stdc++.h>
using namespace std;
int n;
int A[40];
int D[40][40];
int f(int x,int y)
{
if(x>y) return 1;
if(x==y) return A[x];
if(x+1==y) return A[x]+A[y];
int cc;
for(int i=x;i<=y;i++)
{
if(A[i]+f(x,i-1)*f(i+1,y)>D[x][y]) cc=i;
D[x][y]=max(D[x][y],A[i]+f(x,i-1)*f(i+1,y));
}
return D[x][y];
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>A[i];
}
memset(D,-1,sizeof(D));
cout<<f(0,n-1);
}