这道题超级好 就是我太菜了写了几个小时不算是debug了几个小时。

我只想出了几个小剪枝 可能是状态不太好吧 写完这道题真的是完美诠释了什么,叫做:

暴力出奇迹!!! 真的是太暴力了.

最多只移动5步 时间复杂度为 35^5但是并非如此 因为要下落什么的还要消除什么的还要重新赋值什么的。

这样的复杂度为(35*35)^5= 1225^5 早 超时了 但是剪枝的力量是无穷的!

有 交换两个相同颜色块减掉 当前局面有某种颜色数量<=2减掉 如果右边是空的我们再考虑向左移动否则就全部向右移动

大体上就这几个。 练习了一下dfs 没想到 错误百出。

1 fall 的时候 没想清楚 应该怎么下落

2 剪枝的不够精准

3 i j 疯狂打错 0 疯狂打成1

4 内外循环没分清

5 细枝末节j 打成j-1

6 以为函数传递数组回溯时该数组原本的值不会改变,其实是会改变的。

7 没有充分考虑好细节 什么时候需要fall没考虑清楚

8 最后 本人菜的要死。照着题解代码拍还拍了几个小时才全部改出来
9 缺乏勇气 感觉要超时就不敢写 没了 气死了。。。

  1. //#include<bits/stdc++.h>
  2. #include<iomanip>
  3. #include<iostream>
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<string>
  7. #include<queue>
  8. #include<deque>
  9. #include<cmath>
  10. #include<ctime>
  11. #include<cstdlib>
  12. #include<stack>
  13. #include<algorithm>
  14. #include<vector>
  15. #include<cctype>
  16. #include<utility>
  17. #include<set>
  18. #include<bitset>
  19. #include<map>
  20. #define INF 2147483646
  21. #define ll long long
  22. #define min(x,y) (x>y?y:x)
  23. #define max(x,y) (x>y?x:y)
  24. #define R register
  25. #define up(p,i,n) for(int i=p;i<=n;++i)
  26. using namespace std;
  27. char buf[<<],*fs,*ft;
  28. inline char getc()
  29. {
  30. return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;
  31. }
  32. inline int read()
  33. {
  34. int x=,f=;char ch=getchar();
  35. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  36. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  37. return x*f;
  38. }
  39. inline void put(ll x)
  40. {
  41. x<?x=-x,putchar('-'):;
  42. int num=;char ch[];
  43. while(x)ch[++num]=x%+'',x/=;
  44. num==?putchar(''):;
  45. while(num)putchar(ch[num--]);
  46. putchar('\n');return;
  47. }
  48. int n=,m=,b,T,flag;
  49. int vis[][];
  50. int a[][],cnt[];
  51. struct wy
  52. {
  53. int x,y,k;
  54. }t[];
  55. int move()
  56. {
  57. int flag=;
  58. up(,i,n)up(,j,m)
  59. {
  60. if(!a[i][j])continue;
  61. if(j<=m-)if(a[i][j]==a[i][j+]&&a[i][j]==a[i][j+])
  62. vis[i][j]=vis[i][j+]=vis[i][j+]=,flag=;
  63. if(i<=n-)if(a[i][j]==a[i+][j]&&a[i][j]==a[i+][j])
  64. vis[i][j]=vis[i+][j]=vis[i+][j]=,flag=;
  65. }
  66. return flag;
  67. }
  68. void fall()
  69. {
  70. up(,i,n)up(,j,m)if(vis[i][j])a[i][j]=;
  71. up(,j,m)
  72. up(,i,n)
  73. {
  74. if(!a[i][j])
  75. {
  76. up(i+,k,n)
  77. if(a[k][j]){a[i][j]=a[k][j];a[k][j]=;break;}
  78. }
  79. }
  80. memset(vis,,sizeof(vis));
  81. return;
  82. }
  83. void dfs(int depth)
  84. {
  85. if(depth==b+)
  86. {
  87. int flag=;
  88. up(,i,n)up(,j,m)if(a[i][j]){flag=;break;}
  89. if(!flag)
  90. {
  91. up(,i,b)printf("%d %d %d\n",t[i].x,t[i].y,t[i].k);
  92. exit();
  93. }
  94. return;
  95. }
  96. up(,i,n)up(,j,m)cnt[a[i][j]]++;
  97. up(,i,)if(cnt[i]==||cnt[i]==)return;
  98. int tmp[][];
  99. up(,i,n)up(,j,m)tmp[i][j]=a[i][j];
  100. up(,j,m)
  101. {
  102. up(,i,n)
  103. {
  104. if(!a[i][j])continue;
  105. if(a[i][j]!=a[i][j+]&&j+<=m)
  106. {
  107. swap(a[i][j],a[i][j+]);
  108. t[depth]=(wy){j,i,};
  109. fall();
  110. while(move())fall();
  111. dfs(depth+);
  112. up(,i,n)up(,j,m)a[i][j]=tmp[i][j];
  113. }
  114. if(j->=&&a[i][j-]==)
  115. {
  116. swap(a[i][j],a[i][j-]);
  117. t[depth]=(wy){j,i,-};
  118. fall();
  119. while(move())fall();
  120. dfs(depth+);
  121. up(,i,n)up(,j,m)a[i][j]=tmp[i][j];
  122. }
  123. }
  124. }
  125. }
  126. int main()
  127. {
  128. //freopen("1.in","r",stdin);
  129. b=read();
  130. up(,i,m)
  131. {
  132. int t=,x;
  133. while()
  134. {
  135. x=read();
  136. if(x==)break;
  137. a[t][i]=x;
  138. ++t;
  139. }
  140. }
  141. /*for(int i=n;i>=0;--i)
  142. {
  143. for(int j=0;j<=m;++j)cout<<a[i][j]<<' ';
  144. puts("");
  145. }*/
  146. dfs();
  147. put(-);
  148. return ;
  149. }
无法逃避的是自我,而无法挽回的是过去。——机动战士高达

mayan游戏的更多相关文章

  1. NOIP2011 Mayan游戏

    3 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ...

  2. noip提高组2011 Mayan游戏

    Mayan游戏 描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.**游戏通关 ...

  3. [题目] Luogu P1312 Mayan游戏

    题面 题目描述 $ Mayan puzzle $是最近流行起来的一个游戏.游戏界面是一个 \(7行 \times 5列\)的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放 ...

  4. $Mayan$游戏

    \(Mayan\)游戏 好啊,一年(半年)来的梦魇,终于结束了. 其实我从来没料到整体竟然会如此暴力--做的时候机房里冷得很,感觉晕晕乎乎地做完了,晕晕乎乎地调了好久,晕晕乎乎地听(看了题解的)\(q ...

  5. 洛谷P1312 Mayan游戏

    P1312 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他 ...

  6. [Luogu 1312] noip11 Mayan游戏

    [Luogu 1312] noip11 Mayan游戏 Problem: Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  7. luoguP1312 Mayan游戏 题解(NOIP2011)

    luoguP1312 Mayan游戏 题目 #include<bits/stdc++.h> #define ll long long #define rg register #define ...

  8. Luogu P1312 Mayan游戏(搜索)

    P1312 Mayan游戏 题意 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个\(7\)行\(\times 5\)列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必 ...

  9. 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏

    Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

  10. NOIp 2011 mayan游戏 搜索

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

随机推荐

  1. php 默认保几位小数,末尾为0去掉

    计算保留几位小数,末位为0舍去 // 计算 默认保留1位小数 protected function getSprintf($value,$count,$digit = 1) { $num = 0; i ...

  2. Encode and Decode TinyURL

    TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/desi ...

  3. Lua中的函数

    [前言] Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: function MyFunc(param) -- Do something end 在调用函数时,也需要将对应的参数 ...

  4. 【原创】大数据基础之Hadoop(1)HA实现原理

    有些工作只能在一台server上进行,比如master,这时HA(High Availability)首先要求部署多个server,其次要求多个server自动选举出一个active状态server, ...

  5. 【原创】Linux基础之用户和组

    1 添加.删除用户 # useradd $user# userdel $user 2 设置用户密码 # passwd $user /etc/passwd 3 查看$user的用户和组信息 # id $ ...

  6. 【原创】大叔问题定位分享(12)Spark保存文本类型文件(text、csv、json等)到hdfs时为什么是压缩格式的

    问题重现 rdd.repartition(1).write.csv(outPath) 写文件之后发现文件是压缩过的 write时首先会获取hadoopConf,然后从中获取是否压缩以及压缩格式 org ...

  7. POJ1321 棋盘问题(简单搜索)

    题意: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放 ...

  8. thinkphp5调用阿里大鱼短信

    :在Controller.php public function send() { if (request()->isPost()) { $phone = input('post.phone/s ...

  9. 斐波那契求第n项

    摘自  https://blog.csdn.net/lpjishu/article/details/51323116 斐波那契求第n项是常见的算法题 方法1  递归法 //斐波那契 0,1,1,2,3 ...

  10. 1002-谈谈ELK日志分析平台的性能优化理念

    在生产环境中,我们为了更好的服务于业务,通常会通过优化的手段来实现服务对外的性能最大化,节省系统性能开支:关注我的朋友们都知道,前段时间一直在搞ELK,同时也记录在了个人的博客篇章中,从部署到各个服务 ...