社区讨论
石子合并最大值有误求助
P1880[NOI1995] 石子合并参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo8bb033
- 此快照首次捕获于
- 2023/10/27 15:49 2 年前
- 此快照最后确认于
- 2023/10/27 15:49 2 年前
WA #2 #3 #4
求最小是对的
疑似最大分数求解有误,而且都是小了一点,但是找不到原因
code:
CPP#include<bits/stdc++.h>
#define ll long long
#define fr(i,r) for(int i=1;i<=r;i=-~i) //for:1->r
#define For(i,l,r) for(int i=l;i<=r;i=-~i) //for:l->r
#define Rof(i,r,l) for(int i=r;i>=l;i=~(-i)) //for:r->l
using namespace std;
const int N=105,Inf=0x7fffffff;
char cch;
int res,zf;
inline int rd()
{
while((cch=getchar())<45);
if(cch^45)res=cch^48,zf=1;
else res=0,zf=-1;
while((cch=getchar())>=48)res=(res*10)+(cch^48);
return res*zf;
}
int n=rd();
int a[N<<1];
int sum[N<<1];
int f[2][N<<1][N<<1];//f[0]:最小 f[1]:最大
int mi=Inf,mx;
int main()
{
// freopen("P1880.in","r",stdin);
// freopen("P1880.out","w",stdout);
memset(f[0],63,sizeof(f[0]));
fr(i,n) a[i]=a[i+n]=rd(),sum[i]=sum[i-1]+a[i],f[0][i][i]=0;
For(i,n+1,n<<1) sum[i]=sum[i-1]+a[i],f[0][i][i]=0;
For(i,2,n)
{
fr(l,n)
{
int ed=l+i-1;
For(k,l,ed-1)
{
f[1][l][ed]=max(f[1][l][ed],f[1][l][k]+f[1][k+1][ed]+(sum[ed]-sum[l-1]));
f[0][l][ed]=min(f[0][l][ed],f[0][l][k]+f[0][k+1][ed]+(sum[ed]-sum[l-1]));
}
}
}
fr(i,n)
{
mi=min(mi,f[0][i][i+n-1]);
mx=max(mx,f[1][i][i+n-1]);
}
cout<<mi<<'\n'<<mx;
return 0;
}
#2.in:
CPP46
16 4 14 12 0 3 11 8 18 2 6 8 6 7 13 7 8 14 11 2 16 12 16 0 8 1 3 10 7 16 0 16 11 17 13 18 5 15 0 12 19 0 0 5 3 1
#2.ans:
CPP2087
10554
my ans:
CPP2087
10544
回复
共 3 条回复,欢迎继续交流。
正在加载回复...