The 2022 ICPC Asia Regionals Online Contest (II) B

B Non-decreasing Array

我们可以知道两个操作都是一样的
那我们直接记dp[i][j]为前i个数选了j个数 并且以ai为结尾的max
状态转移直接枚举 dp[k][j-1]+(a[i]-a[k])^2 即可
ai范围有负数 所以我们初始化dp数组为负无穷 dp[1][1]为0即可

void solve() {
    int n;cin>>n;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i];
    memset(dp,-127,sizeof dp);
    dp[1][1]=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            for(int k=0;k<i;k++)
                dp[i][j]=max(dp[i][j],dp[k][j-1]+(a[i]-a[k])*(a[i]-a[k]));
    for(int i=1;i<=n;i++)cout<<dp[n][max(2ll,n-2*i)]<<endl;
}
posted @ 2022-09-26 22:04  ycllz  阅读(54)  评论(0)    收藏  举报