1 solutions
-
1
#include<bits/stdc++.h> using namespace std; int n; int a[205]={}; int dp[205][205]={};//dp[i][j]:从i开始,j结束的合并 int ans=-0x3f3f3f3f; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) a[i+n]=a[i];//复制一边当环形 for(int i=1;i<=n;i++) dp[i][i]=0;//合并同一颗没有意义 a[n*2+1]=a[1]; for(int len=2;len<=n;len++){//枚举合并长度 for(int l=1;l+len-1<=2*n;l++){//枚举左端点 int r=l+len-1;//右端点 dp[l][r]=0; for(int k=l;k<r;k++){ int c=a[l]*a[k+1]*a[r+1];//合并花费 dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]+c); } } } for(int i=1;i<=n;i++){ int x=i+n-1; ans=max(dp[i][x],ans); //求每一种全部合并方案的能量最大值 } cout<<ans<<"\n"; return 0; }
- 1
Information
- ID
- 150
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 5
- Tags
- # Submissions
- 24
- Accepted
- 13
- Uploaded By