1 solutions
-
0
C++ :
#include <bits/stdc++.h> using namespace std; const int N = 210; int n; int a[N];//a存储珠子的头标记 //dp[l][r]:合并lr得到的最大值 int dp[N][N]; int main() { cin>>n; for(int i = 1;i <= n;i++){ cin>>a[i]; a[i+n] = a[i];//将区间复制 } //状态计算 //阶段:穷举区间长度 for(int len = 3;len <= n + 1;len++){ //状态:穷举区间的起点 for(int l = 1;l + len - 1 <= 2 * n;l++){ //区间终点 int r = l + len - 1; //决策:穷举分割点 for(int k = l+1;k < r;k++){ dp[l][r] = max(dp[l][r],dp[l][k]+dp[k][r]+a[l]*a[k]*a[r]); } } } //求结果 int r = 0; for(int i = 1;i <= n;i++){ r = max(r,dp[i][i+n]);//dp[1,n+1] dp[2,n+2]... dp[n,2*n] } cout<<r; return 0; }
- 1
Information
- ID
- 10001
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By