社区讨论
蒟蒻求助,大佬救我
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 条回复,欢迎继续交流。
正在加载回复...