题目真心坑
查看原帖
题目真心坑
136596
尤斯蒂亚楼主2020/11/26 17:18

这是90分的代码

#include<cstdio>
#include<iostream>
#include<stdio.h>
#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<string>
using namespace std;
int r,c;
int value[101][101];
int num[101][101];

void dp(int x,int y)
{
	if (value[x-1][y]!=0 and num[x-1][y]<num[x][y] and value[x-1][y]+1 >= value[x][y])  value[x][y]=value[x-1][y]+1;
	if (value[x+1][y]!=0 and num[x+1][y]<num[x][y] and value[x+1][y]+1 >= value[x][y])  value[x][y]=value[x+1][y]+1;
	if (value[x][y-1]!=0 and num[x][y-1]<num[x][y] and value[x][y-1]+1 >= value[x][y])  value[x][y]=value[x][y-1]+1;
	if (value[x][y+1]!=0 and num[x][y+1]<num[x][y] and value[x][y+1]+1 >= value[x][y])  value[x][y]=value[x][y+1]+1;
}

void search(int x,int y)
{
	if (num[x][y]<num[x-1][y]and num[x][y]<num[x+1][y]and num[x][y]<num[x][y-1]and num[x][y]<num[x][y+1])
	value[x][y]=1;
}

int check()
{
	for (int i=1;i<=r;++i)
	for (int j=1;j<=c;++j)
		{
			if (value[i][j]==0) return 0;
		}
	return 1;
}

int main()
{
	int maxn=0;
	cin>>r>>c;
	
	for (int i=0;i<=r+1;++i)
	for (int j=0;j<=c+1;++j)
		{
			num[i][j]=999999;
		}
	
	for (int i=1;i<=r;++i)
	for (int j=1;j<=c;++j)
		{
			cin>>num[i][j];
		}
		
	for (int i=1;i<=r;++i)
	for (int j=1;j<=c;++j)
		{
			value[i][j]=0;
		}
	
	for (int i=1;i<=r;++i)
	for (int j=1;j<=c;++j)
		{
			search(i,j);
		}
//预处理 

	for (int k=1;k<=r*c/2;++k)
	{
	for (int i=1;i<=r;++i)
	for (int j=1;j<=c;++j)
		{
			dp(i,j);
		}
	}
	
	for (int i=1;i<=r;++i)
	for (int j=1;j<=c;++j)
		{
			maxn=max(maxn,value[i][j]);
		}	
	cout<<maxn;
	return 0;
}

紧接着我在结尾出加了一行

maxn=max(maxn,value[i][j]);
		}
	if (maxn==0) maxn=1;	
	cout<<maxn;
	return 0;
}

竟然AC了!!! 说明

2 2
1 1
1 1

这个样例的答案居然是1,但是按照题目描述和实际情况,应该是根本滑不了才对。 太坑了!!

2020/11/26 17:18
加载中...