社区讨论

求小数据hack

P1398[NOI2013] 书法家参与者 4已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mi7z4ctz
此快照首次捕获于
2025/11/21 05:59
4 个月前
此快照最后确认于
2025/11/21 05:59
4 个月前
查看原帖
人肉debug半天找不出锅,大家有什么小hack数据吗?
CPP
/***************************************************************
	File name: 1398.cpp
	Author: huhao
	Create time: Sun 23 Jun 2019 07:18:13 PM CST
***************************************************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define fr(i,a,b) for(int i=(a),end_##i=(b);i<=end_##i;i++)
#define fd(i,a,b) for(int i=(a),end_##i=(b);i>=end_##i;i--)
int read()
{
	int r=0,t=1,c=getchar();
	while(c<'0'||c>'9')
	{
		t=c=='-'?-1:1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		r=r*10+c-48;
		c=getchar();
	}
	return r*t;
}
const int N=510,inf=(1<<29);
int n,m,w[N][N],s[N][N],a[N][N],b[N][N],c[N][N],d[N][N],e[N][N],f[N],g[N][N],h[N],o[N][N],p[N][N],q[N][N],ans;
int main()
{
	n=read();
	m=read();
	fr(i,1,n)
		fr(j,1,m)
		{
			w[i][j]=read();
			s[i][j]=s[i-1][j]+w[i][j];
		}
	fr(i,0,n)
		fr(j,0,n)
			a[i][j]=b[i][j]=e[i][j]=g[i][j]=o[i][j]=p[i][j]=q[i][j]=-inf;
	fr(i,0,m)
		f[i]=h[i]=-inf;
	fr(i,1,m)
	{
		fr(j,0,n)
			fr(k,0,n)
				c[j][k]=d[j][k]=-inf;
		fr(j,1,n)
			fr(k,j,n)
				c[j][k]=b[j][k];
		fr(j,2,n)
		{
			int x=c[j][j];
			fd(k,j-1,1)
			{
				e[k][j]=max(e[k][j],x)+s[j][i]-s[k-1][i];
				f[i]=max(f[i],e[k][j]);
				x=max(x,c[k][j]);
			}
		}
		fd(j,n-1,1)
		{
			int x=a[j][n];
			fd(k,n-1,j)
			{
				b[j][k]=x+s[k][i]-s[j-1][i];
				x=max(x,a[j][k]);
			}
		}
		fr(j,1,n)
		{
			d[1][j]=c[1][j];
			fr(k,2,j)
				d[k][j]=max(d[k-1][j],c[k][j]);
		}
		fr(j,1,n)
		{
			int x=j==1?-inf:d[j-1][j-1];
			fr(k,j,n)
			{
				x=max(x,d[j][k]);
				b[j][k]=max(b[j][k],x+s[k][i]-s[j-1][i]);
			}
		}
		fr(j,1,n)
			fr(k,j,n)
				a[j][k]=max(a[j][k],0)+s[k][i]-s[j-1][i];
	}
	fr(i,2,m)
		f[i]=max(f[i],f[i-1]);
	fr(i,4,m-1)
	{
		fr(j,1,n)
			fr(k,j+2,n)
			{
				g[j][k]=max(g[j][k],f[i-3]+s[k][i-1]-s[j-1][i-1])+w[j][i]+w[k][i];
				h[i+1]=max(h[i+1],g[j][k]+s[k][i+1]-s[j-1][i+1]);
			}
	}
	fr(i,2,m)
		h[i]=max(h[i],h[i-1]);
	ans=-inf;
	fr(i,3,m)
	{
		fr(j,1,n)
			fr(k,j+2,n)
			{
				q[j][k]=max(q[j][k],p[j][k])+w[j][i]+w[k][i];
				ans=max(ans,q[j][k]);
			}
		fr(j,1,n)
			fr(k,j+2,n)
				p[j][k]=max(p[j][k],o[j][k])+s[k][i]-s[j-1][i];
		fr(j,1,n)
			fr(k,j+2,n)
				o[j][k]=max(o[j][k],h[i-2])+w[j][i]+w[k][i];
	}
	printf("%d\n",ans);
	return 0;
}

回复

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

正在加载回复...