上升点列
题目链接
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;
}