1. 程式人生 > 其它 >P1063 [NOIP2006 提高組] 能量項鍊

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); }