P1063 [NOIP2006 提高组] 能量项链
题目:
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); }
浙公网安备 33010602011771号