社区讨论

石子合并最大值有误求助

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:
CPP
46
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:
CPP
2087
10554
my ans:
CPP
2087
10544

回复

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

正在加载回复...