题目:
分析:被二叉树,X序遍历吓着了。
代码:傻了,写成了先序
#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);
}