题意:

给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子。

然后到C(1<=N<=9)棋手在空位放上自己序号C的棋子, 放完后, 不与空位相邻的group被消去, 每消去一个不是C的棋子得一分, 消去C的棋子扣一分, 问能得到最多的分数是多少。

分析:

令ans = 0;

搜索每一个棋子, 找出他的group。

如果这个group不与空位相邻, 而且棋子与棋手序号相等, 那么ans -= group数量, 如果棋子不与棋手序号相等 ans += group数量

可以不设置全局变量来找出搜索块的数量

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <ios>
 4 using namespace std;
 5 const int maxn = 15;
 6 int N, C;
 7 int dir[6][2] = { {-1, 0},{-1, -1},{0, -1},{0, 1},{1, 0},{1, 1} };
 8 bool vis[maxn][maxn];
 9 int board[maxn][maxn];
10 bool conetZero = 0;
11 int dfs(int x, int y, int c)
12 {
13     if(board[x][y] == 0)
14     {
15         conetZero = 1;
16         return 0;
17     }
18     vis[x][y] = 1;
19     int cnt = 1;
20     for(int d = 0; d < 6; d++)
21     {
22         int tx = x, ty = y;
23         tx += dir[d][0], ty += dir[d][1];
24         if(tx <= 0 || tx > N || ty <= 0 || ty > tx || vis[tx][ty])
25             continue;
26         if(board[tx][ty] == c || board[tx][ty] == 0)
27             cnt += dfs(tx,ty, c);
28     }
29     return cnt;
30 }
31 int solve()
32 {
33     memset(vis, 0 , sizeof(vis));
34     int ans = 0;
35
36     for(int i = 1; i <= N; i++)
37     for(int j = 1; j <= i; j++)
38     {
39         if(board[i][j] != 0 && !vis[i][j])
40         {
41             conetZero = 0;
42             int temp = dfs(i,j,board[i][j]);
43             if(!conetZero){
44                 ans += board[i][j] == C ? -temp: temp;
45             }
46         }
47     }
48     return ans;
49 }
50 int main()
51 {
52     while(~scanf("%d %d", &N, &C) && N)
53     {
54
55         memset( board , 0 , sizeof(board) );
56
57         for(int i = 1; i <= N; i++)
58         for(int j = 1; j <= i; j++)
59             scanf("%d", &board[i][j] );
60
61
62
63         int ans = -123456;
64
65         for(int i = 1; i <= N; i++)
66         for(int j = 1; j <= i; j++)
67         {
68             if( board[i][j] == 0){
69                 board[i][j] = C;
70                 ans = max( ans, solve() );
71                 board[i][j] = 0;
72             }
73         }
74
75         printf("%d\n", ans);
76
77     }
78     return 0;
79 }

转载于:https://www.cnblogs.com/Jadon97/p/7811429.html

POJ 1414 Life Line(搜索)相关推荐

  1. poj Best Cow Line

    Best Cow Line 题意: 就是说给你一系列字母, 要你取出字典序最小的字符串,每次只能从最上面或者最下面进行取,每次从上和从下选择最小的,若相等则向中间搜索,找到较小的. 注意: 1.先吸收 ...

  2. J - 最强王者 POJ - 1753 Flip Game 搜索+状态压缩

    J - 最强王者 POJ - 1753 Flip game is played on a rectangular 4x4 field with two-sided pieces placed on e ...

  3. POJ 1324 Holedox Moving 搜索

    题目地址: http://poj.org/problem?id=1324 优先队列---A*的估价函数不能为蛇头到(1,1)的距离,这样会出错. 看了discuss,有大神说这题A*的估价函数为BFS ...

  4. POJ 1321 棋盘问题 搜索

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

  5. poj 1088(记忆化搜索)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 88560   Accepted: 33212 Description ...

  6. POJ 1579 记忆化搜索

    [问题描述] 自定义函数w(a,b,c). 如果 a ≤ 0 或b ≤ 0 或 c ≤ 0, 则返回结果: 1;  如果 a > 20 或 b > 20 或 c > 20, 则返回结 ...

  7. POJ 1189 记忆化搜索

    钉子和小球 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7218   Accepted: 2164 Description ...

  8. poj 1699 Best Sequence (搜索技巧 剪枝 dfs)

    题目链接 题意:给出几个基因片段,要求你将它们排列成一个最短的序列,序列中使用了所有的基因片段,而且不能翻转基因. 分析:先计算出add数组,再dfs枚举. 空间复杂度O(n*n),  最坏时间复杂度 ...

  9. POJ 1950 Dessert DFS 搜索

    题意:输入n(1 <= n <= 15),求由1到n的数经过'+','-'或'.'三种运算后值为0的可能情况数,并输出前20组答案,若不足20组,输出全部.             (10 ...

最新文章

  1. 简单的利用IDEA搭建SpringBoot+Maven+Mybatis+自动生成代码
  2. 云安全云计算 迷团大揭幕
  3. deepin配置反向代理映射本地到公网
  4. 学习SOX(1) 在VC中编译
  5. vue“路由懒加载” 技术,让网页快速加载 (优化篇)
  6. ubuntu动态截图(GIF动画)
  7. 聪明的苹果——iPhone 3GS。
  8. 酷狗音乐、艺龙旅行等42款APP被曝违规收集用户信息
  9. 解决shiro和quartz2 版本冲突问题
  10. 【Opencv系列】之显示图像以及使用鼠标截取图像局部区域进行放大
  11. Silverlight客户端和WCF服务器端共享类库
  12. MySQL 8.0 异步复制的三种方式
  13. Python入门--字典生成式,生成字典的公式
  14. LR运行负载测试场景-笔记
  15. 设计模式 AOP 面向切入编程
  16. Python+Appium+夜神模拟器安装与简单运行(1/2)
  17. 国家或地区内期货市场竞争格局的变迁
  18. python自动化通知webhook接口代码参考
  19. Python的全局安装源配置
  20. 服务器系统要用GUID还是MBR,win7mbr和guid应该选哪一个

热门文章

  1. [讨论]你的女朋友值多少钱?
  2. 《OpenCV3编程入门》学习笔记6 图像处理(四)形态学滤波(2):开运算、闭运算、形态学梯度、顶帽、黑帽
  3. sqlmap使用_sqlmap从入门到精通第四章47使用EW代理导出和导入MSSQL数据
  4. io vivado 怎么查看ps_ZYNQ 7020学习笔记之PL侧普通信号中断PS的实验
  5. float最大值_float.h库
  6. 功能测试常用6种方法_建筑管道常用的8种连接方法
  7. 如何访问docker内php,docker中容器之间如何访问
  8. html表格中加入斜线,在HTML中显示带斜线的表格
  9. cocos 卡牌类_优质链游大爆发,Cocos-BCX版《恶龙必须死》有什么特别之处?
  10. 进程创建函数fork()和vfork()