比赛 CSP2022普及组 评测结果 EEEEEEEEEEEEEEEEEEEE
题目名称 上升点列 最终得分 0
用户昵称 flyfreem 运行时间 3.746 s
代码语言 C++ 内存使用 10.24 MiB
提交时间 2022-10-29 16:36:23
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. 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];
  4. void dfs(int x,int y,int ands,int len){
  5. // cout<<x<<" "<<y<<" "<<ands<<endl;
  6. if(l[x][y][ands])return;
  7. l[x][y][ands]=1;
  8. ans=max(ans,len);
  9. for(int i=0;i<2;i++){
  10. int xx=x+xand[i],yy=y+yand[i];
  11. if(xx<=105&&yy<=105&&xx>0&&yy>0&&!use[xx][yy]){
  12. if(mp[xx][yy]){
  13. use[xx][yy]=1;
  14. dfs(xx,yy,ands,len+1);
  15. use[xx][yy]=0;
  16. }else if(ands){
  17. use[xx][yy]=1;
  18. dfs(xx,yy,ands-1,len+1);
  19. use[xx][yy]=0;
  20. }
  21. }
  22. }
  23. }
  24. int main(){
  25. freopen("point.in","r",stdin);
  26. freopen("point.out","w",stdout);
  27. cin>>n>>k;
  28. for(int i=1;i<=n;i++){
  29. cin>>xz[i]>>yz[i];
  30. mp[xz[i]][yz[i]]=1;
  31. maxx=min(maxx,xz[i]);
  32. maxy=min(maxy,yz[i]);
  33. }
  34. for(int i=1;i<=maxx;i++){
  35. for(int j=1;j<=maxy;j++){
  36. if(mp[i][j])dfs(i,j,k,1);
  37. else dfs(i,j,k-1,1);
  38. }
  39. }
  40. cout<<ans;
  41. return 0;
  42. }
  43.