社区讨论

蒟蒻求助,大佬救我

P1880[NOI1995] 石子合并参与者 4已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mi7ruzmt
此快照首次捕获于
2025/11/21 02:35
4 个月前
此快照最后确认于
2025/11/21 02:35
4 个月前
查看原帖

不知道是哪里错了!

动态转移方程??

计算石子总数??

合并石子??

输入输出??

还是其他??
CPP
//dp[i][j]=min(dp[i][m]+[m+1][j])+total[i][j];
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
int line[101];
int dpmax[101][101];
int dpmin[101][101];
int total[101][101];
int n;
int main() {
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>line[i];
    }
    for(int i=1; i<=n; i++) {
        for(int j=0; j<n; j++) {
            total[i][(i+j-1)%n+1]=total[i][(i+j-2+n)%n+1]+line[(i+j-1)%n+1];
        }
    }
    for(int j=0; j<n; j++) {
        for(int i=1; i<=n; i++) {
            int minn=10000000;
            int maxn=0;
            for(int m=i;m<=i+j;m++){
                minn=min(minn,dpmin[i][(m-1)%n+1]+dpmin[(m)%n+1][(i+j-1)%n+1]);
                maxn=max(maxn,dpmax[i][(m-1)%n+1]+dpmax[(m)%n+1][(i+j-1)%n+1]);
            }
            dpmin[i][(i+j-1)%n+1]=minn+total[i][(i+j-1)%n+1];
            dpmax[i][(i+j-1)%n+1]=maxn+total[i][(i+j-1)%n+1];
        }
    }
    cout<<dpmin[1][n]<<endl;
    cout<<dpmax[1][n]<<endl;
    return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...