比赛 |
CSP2022普及组 |
评测结果 |
EEEEEEEEEEEEEEEEEEEE |
题目名称 |
上升点列 |
最终得分 |
0 |
用户昵称 |
flyfreem |
运行时间 |
3.746 s |
代码语言 |
C++ |
内存使用 |
10.24 MiB |
提交时间 |
2022-10-29 16:36:23 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int xand[2]={0,1},yand[2]={1,0},xz[505],yz[505],use[105][105],mp[105][105],maxx=200,maxy=200,n,k,ans,l[105][105][105];
void dfs(int x,int y,int ands,int len){
// cout<<x<<" "<<y<<" "<<ands<<endl;
if(l[x][y][ands])return;
l[x][y][ands]=1;
ans=max(ans,len);
for(int i=0;i<2;i++){
int xx=x+xand[i],yy=y+yand[i];
if(xx<=105&&yy<=105&&xx>0&&yy>0&&!use[xx][yy]){
if(mp[xx][yy]){
use[xx][yy]=1;
dfs(xx,yy,ands,len+1);
use[xx][yy]=0;
}else if(ands){
use[xx][yy]=1;
dfs(xx,yy,ands-1,len+1);
use[xx][yy]=0;
}
}
}
}
int main(){
freopen("point.in","r",stdin);
freopen("point.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>xz[i]>>yz[i];
mp[xz[i]][yz[i]]=1;
maxx=min(maxx,xz[i]);
maxy=min(maxy,yz[i]);
}
for(int i=1;i<=maxx;i++){
for(int j=1;j<=maxy;j++){
if(mp[i][j])dfs(i,j,k,1);
else dfs(i,j,k-1,1);
}
}
cout<<ans;
return 0;
}