为啥会错呢??
查看原帖
为啥会错呢??
506524
wangzll楼主2022/10/25 11:41
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,tot,cnt,maxx1,maxx2,maxx;
int a[1005][1005],vis[1005][1005];
int dx=1,dy=1; 
struct node
{
	int start,cnt;
}dis[1005];
void dfs(int x,int y)
{ 
	if(x==n) dx=-dx;
	if(y==1||y==n) dy=-dy;
	x+=dx,y+=dy;
	if(vis[x][y]==0) cnt+=a[x][y];
	if(x==1) return ;
	dfs(x,y);
}
void dfs1(int x,int y)
{ 
	if(x==n) dx=-dx;
	if(y==1||y==n) dy=-dy;
	x+=dx,y+=dy;
	vis[x][y]=1;
	if(x==1) return ;
	dfs1(x,y);
}
bool cmp(node x,node y)
{
	if(x.cnt==y.cnt) return x.start<y.start;
	return x.cnt>y.cnt;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	for(int i=1;i<=n;i++)
	{
		cnt=0,dx=1,dy=1;
		if(i==1) 
		{
			for(int j=1;j<=n;j++)
			{
				cnt+=a[j][j];
			}
		}
		else if(i==n)
		{
			for(int j=1;j<=n;j++)
			{
				cnt+=a[j][n-j+1];
			}
		}
		else dfs(1,i);
		++tot;
		dis[tot].cnt=cnt;
		dis[tot].start=i;
	} 
	sort(dis+1,dis+tot+1,cmp);
	maxx1=dis[1].cnt;
	for(int t=1;t<=tot;t++)
	{
		dx=1,dy=1;
		memset(vis,0,sizeof vis);
		if(dis[t].cnt==maxx1)
		{
			dfs1(1,dis[t].start);
			for(int i=1;i<=n;i++)
			{
				cnt=0,dx=1,dy=1;
				if(i==1) 
				{
					for(int j=1;j<=n;j++)
					{
						if(!vis[j][j])cnt+=a[j][j];
					}
				}
				else if(i==n)
				{
					for(int j=1;j<=n;j++)
					{
						if(!vis[j][n-j+1])cnt+=a[j][n-j+1];
					}
				}
				else dfs(1,i);
				maxx2=max(maxx2,cnt);
			} 
		}
		maxx=max(maxx,maxx1+maxx2);
	}
	cout<<maxx<<endl;
	return 0;
}
2022/10/25 11:41
加载中...