上升点列

题目链接

http://oj.tfls.net/d/lnzt/p/16

根据数据规模k=0的情况有40%,可尝试使用BFS,结果只有10分,其他点提示TLE

//根据数据范围可知k=0数据为40%,数据规模不大可用BFS实现 
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
const int max_xy=1e9+10;//xy的范围 
int n, k, x, y;
bool a[10000][10000];//用于标记是否存在该点,得分多少受制于该2维数组大小 
bool vis[10000][10000];//BFS过程中用于标记是否访问过 
struct node{
	int x, y;
	int s;//记录层数 
}p[510];
int ans;
int main()
{
	//freopen("point5.in", "r", stdin);
	cin>>n>>k;
	for(int i=0; i<n; i++){
		cin>>p[i].x>>p[i].y;
		a[p[i].x][p[i].y]=1;
	}
	
	for(int i=0; i<n; i++){
		memset(vis, 0, sizeof(vis));
		queue <node> que;
		p[i].s=1;  
		que.push(p[i]); 
		vis[p[i].x][p[i].y]=1;
		while(!que.empty()){
			node f, t;
			f=que.front();
			ans=max(ans, f.s);
			if(a[f.x+1][f.y] && vis[f.x+1][f.y]==0){//往右走 
				t.x=f.x+1; t.y=f.y; t.s=f.s+1;
				vis[f.x+1][f.y]=1; 
				que.push(t);
			}
			if(a[f.x][f.y+1] && vis[f.x][f.y+1]==0){//往左走 
				t.x=f.x; t.y=f.y+1; t.s=f.s+1;
				vis[f.x][f.y+1]=1;
				que.push(t);
			}
			que.pop();
		}
	}
	cout<<ans;
	return 0;
}
posted @ 2022-11-18 16:18  TFLSNOI  阅读(17)  评论(0编辑  收藏  举报