2021ccpc黑龙江省赛dp题

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
using ll=long long ;
const int maxn=1e3+10;
int dp[maxn][maxn];
int sum[maxn][maxn];
int a[maxn];
int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        sum[i][i]=a[i];
    }
    for(int len=1;len<=n;len++){
        for(int j=1;j+len<=n+1;j++){
            int ends=j+len-1;
            for(int i=j;i<ends;i++){
                dp[j][ends]=max(dp[j][ends],dp[j][i]+dp[i+1][ends]+(int)pow(abs(sum[j][i]-sum[i+1][ends]),2));
                sum[j][ends]=sum[j][i]*sum[i+1][ends];
            }
        }
    }
    cout<<dp[1][n];
}

 服了经典赛后过题!

上一篇:Python真神奇,带你体验另类的“全自动编程”!


下一篇:bzoj2758【scoi2012】Blinker的的噩梦