P1063 [NOIP2006 提高組] 能量項鍊
阿新 • • 發佈:2021-07-29
題目:
https://www.luogu.com.cn/problem/P1063
#include<stdio.h> #include<algorithm> #include<string.h> #include<queue> using namespace std; typedef pair<int ,int > p; typedef long long ll; int t,m; int r[204]; int s[204]; int dp[204][204]; int d[204][204]; struct node { int t,w; }a[204]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&r[i]); for(int i=n+1;i<=n+n;i++) r[i]=r[i-n]; //把環拆成鏈 for(int len=2;len<=n;len++) { for(int i=1,j=i+len-1;i<=n+n&&j<n+n;i++,j=i+len-1) {for(int k=i;k<j;k++) { dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+r[i]*r[k+1]*r[j+1]); //兩個區間一個尾巴是r[k+1],一個頭是r[k+1] } } } int mmax=0; for(int i=1;i+n-1<=n+n;i++) { mmax=max(mmax,dp[i][i+n-1]); } printf("%d\n",mmax); }