能量项链

一个dp提耗费我怎么久。

把长度搞混了。

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<math.h>
using namespace std;
int n,a[209],f[200][200],maxn;
int main()
{
    scanf("%d",&n);
    int c;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&c);
        a[i]=c;
        a[n+i]=c;
    }
    a[n+n+1]=a[1];
    for(int j=1;j<n;j++)//循环到n-1就够了
    for(int i=1;i+j<=n+n;i++)
    for(int k=i;k<i+j;k++)//从i到i+j。j长为n-1
        f[i][i+j]=max((f[i][k]+f[k+1][i+j]+a[i]*a[k+1]*a[j+i+1]),f[i][i+j]);
    for(int i=1;i<=n;i++)
        maxn=max(f[i][i+n-1],maxn);
    cout<<maxn;
    /*
    for(int j=0;j<=n;j++,cout<<endl)
            for(int i=1;i+j<=n+n;i++)                
                printf("%d %d %d* ",i,i+j,f[i][i+j]);        
        */
    return 0;
}

 

posted @ 2017-02-08 16:30  浪矢-CL  阅读(147)  评论(0编辑  收藏  举报