比赛 |
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;
- }
-