1 条题解
-
0Guest LV 0 MOD
-
1
#include<bits/stdc++.h> using namespace std; int a[35],ans[35],root[35][35]; int n,len=0; long long f[35][35]; long long now; long long dfs(int l,int r) { if(f[l][r]!=-1) return f[l][r]; for(int k=l; k<=r; k++) { now=dfs(l,k-1)*dfs(k+1,r)+a[k]; if(now>f[l][r]) { f[l][r]=now; root[l][r]=k; } } return f[l][r]; } void print(int l,int r) { if(l>r) return; cout<<root[l][r]<<" "; print(l,root[l][r]-1); print(root[l][r]+1,r); } int main() { memset(f,-1,sizeof(f)); cin>>n; for(int i=1; i<=n; i++) { cin>>a[i]; f[i][i]=a[i]; root[i][i]=i; } for(int i=1; i<=n; i++) { for(int j=1; j<i; j++) { f[i][j]=1; root[i][j]=-1; } } cout<<dfs(1,n)<<endl; print(1,n); return 0; }
- 1
信息
- ID
- 1301
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 7
- 已通过
- 1
- 通过率
- 14%
- 上传者