一个玄学的问题P1880
  • 板块题目总版
  • 楼主SilverLi
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/2/4 11:40
  • 上次更新2023/10/24 01:46:18
查看原帖
一个玄学的问题P1880
688783
SilverLi楼主2023/2/4 11:40

题目

CodeCode

#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int N=105;
int n,a[N],dp2[N][N];
int dp[N][N],sum[N*2];
signed main() {
//  ios::sync_with_stdio(false);
//  cin.tie(NULL); cout.tie(NULL);
    cin>>n;
    for(int i=1;i<=n;++i) {
        cin>>a[i];
        a[n+i]=a[i];
        sum[i]=sum[i-1]+a[i];
    }
    for(int i=n+1;i<=n*2;++i)
        sum[i]=sum[i-1]+a[i];
    /*for(int i=1;i<=n*2;++i)
        cout<<a[i]<<" ";
    cout<<endl;
    for(int i=1;i<=n*2;++i)
        cout<<sum[i]<<" ";
    cout<<endl;*/
    for(int len=1;len<=n;++len)
        for(int i=1;i+len<=n*2;++i) {
            int j=i+len;
            dp2[i][j]=1000000000;
            for(int k=i;k<j;++k)
                dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]),
                dp2[i][j]=min(dp2[i][j],dp2[i][k]+dp2[k+1][j]+sum[j]-sum[i-1]);
        }
    int ans,ans2=INT_MAX;
    for(int i=1;i<=n;++i)
        ans=max(ans,dp[i][n+i-1]),
        ans2=min(ans2,dp2[i][n+i-1]);
    cout<<ans2<<endl<<ans;
    return 0;
}

LOOK!我中间的注释掉的那一行,用来DUBUG,

我加上它,最后的答案就对了?!

删掉它——错了, 最大值错了

有 dalaodalao 知道怎么改吗?

(在线等

2023/2/4 11:40
加载中...