POJ 1414 Life Line(搜索)
题意:
给定一块正三角形棋盘,然后给定一些棋子和空位,棋子序号为a(1<=a<=9),group的定义是相邻序号一样的棋子。
然后到C(1<=N<=9)棋手在空位放上自己序号C的棋子, 放完后, 不与空位相邻的group被消去, 每消去一个不是C的棋子得一分, 消去C的棋子扣一分, 问能得到最多的分数是多少。
分析:
令ans = 0;
搜索每一个棋子, 找出他的group。
如果这个group不与空位相邻, 而且棋子与棋手序号相等, 那么ans -= group数量, 如果棋子不与棋手序号相等 ans += group数量
可以不设置全局变量来找出搜索块的数量
代码:
#include <cstdio>
#include <cstring>
#include <ios>
using namespace std;
const int maxn = ;
int N, C;
int dir[][] = { {-, },{-, -},{, -},{, },{, },{, } };
bool vis[maxn][maxn];
int board[maxn][maxn];
bool conetZero = ;
int dfs(int x, int y, int c)
{
if(board[x][y] == )
{
conetZero = ;
return ;
}
vis[x][y] = ;
int cnt = ;
for(int d = ; d < ; d++)
{
int tx = x, ty = y;
tx += dir[d][], ty += dir[d][];
if(tx <= || tx > N || ty <= || ty > tx || vis[tx][ty])
continue;
if(board[tx][ty] == c || board[tx][ty] == )
cnt += dfs(tx,ty, c);
}
return cnt;
}
int solve()
{
memset(vis, , sizeof(vis));
int ans = ; for(int i = ; i <= N; i++)
for(int j = ; j <= i; j++)
{
if(board[i][j] != && !vis[i][j])
{
conetZero = ;
int temp = dfs(i,j,board[i][j]);
if(!conetZero){
ans += board[i][j] == C ? -temp: temp;
}
}
}
return ans;
}
int main()
{
while(~scanf("%d %d", &N, &C) && N)
{ memset( board , , sizeof(board) ); for(int i = ; i <= N; i++)
for(int j = ; j <= i; j++)
scanf("%d", &board[i][j] ); int ans = -; for(int i = ; i <= N; i++)
for(int j = ; j <= i; j++)
{
if( board[i][j] == ){
board[i][j] = C;
ans = max( ans, solve() );
board[i][j] = ;
}
} printf("%d\n", ans); }
return ;
}
POJ 1414 Life Line(搜索)的更多相关文章
- POJ.3279 Fliptile (搜索+二进制枚举+开关问题)
POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...
- poj 3279 Fliptile (简单搜索)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16558 Accepted: 6056 Descrip ...
- POJ 1475 Pushing Boxes 搜索- 两重BFS
题目地址: http://poj.org/problem?id=1475 两重BFS就行了,第一重是搜索箱子,第二重搜索人能不能到达推箱子的地方. AC代码: #include <iostrea ...
- Remmarguts' Date POJ - 2449 (A*搜索|k短路)
"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. ...
- poj 1163 The Triangle 搜索 难度:0
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37931 Accepted: 22779 De ...
- poj 1426(同余搜索)
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26926 Accepted: 111 ...
- Test for Job (poj 3249 记忆化搜索)
Language: Default Test for Job Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9733 A ...
- poj 1198 hdu 1401 搜索+剪枝 Solitaire
写到一半才发现能够用双向搜索4层来写,但已经不愿意改了,干脆暴搜+剪枝水过去算了. 想到一个非常水的剪枝,h函数为 当前点到终点4个点的最短距离加起来除以2.由于最多一步走2格,然后在HDU上T了, ...
- POJ 1324 Holedox Moving 搜索
题目地址: http://poj.org/problem?id=1324 优先队列---A*的估价函数不能为蛇头到(1,1)的距离,这样会出错. 看了discuss,有大神说这题A*的估价函数为BFS ...
随机推荐
- 无法获得VMCI 驱动程序的版本: 句柄无效的解决方法
关闭虚拟机,找到安装路径,用记事本打开.vmx结尾的文件 将vmci0.present = "TRUE"改为vmci0.present = "FALSE"保存
- AtCoder Grand Contest 003 E - Sequential operations on Sequence
题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_e 题目大意 一串数,初始为\(1\sim N\),现有\(Q\)个操作,每次操作会把数组长度 ...
- 后缀数组 DC3构造法 —— 详解
学习了后缀数组,顺便把DC3算法也看了一下,传说中可以O(n)复杂度求出文本串的height,先比较一下倍增算法和DC3算法好辣. DC3 倍增法 时间复杂度 O(n)(但是常数很大) O(nlo ...
- Counting The Important Pairs CodeChef - TAPAIR
https://vjudge.net/problem/CodeChef-TAPAIR 合法的删除方法: 第一种:桥边与其余任意边(1)桥*(桥-1)/2(两条桥边)(2)桥*(m-桥)(桥边+其他边) ...
- Mirror Number SPOJ - MYQ10
Mirror Number SPOJ - MYQ10 题意:http://blog.csdn.net/hcbbt/article/details/38349367 稍微改一下http://www.cn ...
- Database UVA - 1592
对于每组数据,首先通过一个map将每个字符串由一个数字代替,相同的字符串由相同数字代替,不同的字符串由不同数字代替.那么题目就变为了询问是否存在行r1,r2以及列c1,c2使得str[r1][c1]= ...
- Kruskal HDOJ 1863 畅通工程
题目传送门 /* 此题为:HDOJ 1233 + HDOJ 1232 */ #include <cstdio> #include <algorithm> #include &l ...
- RHEL 6.5----CDN(lumanger)
主机名 IP 服务 master 192.168.30.130 CDN(LuManager) slave 192.168.30.131 DNS 软件安装包下载地址及安装方法 http:// ...
- P1615 西游记公司
题目背景 一道极其无厘头的题目 题目描述 事情是这样的:西游记中的孙沙猪(孙杀猪)三徒弟在西天取经之后开始进入厦门大学经贸系学习经济,在1个小时的学习后,他们用暴力手段毕业了.然后,他们创办了三个公司 ...
- Windows API函数大全三
7. API之位图.图标和光栅运算函数 BitBlt 将一幅位图从一个设备场景复制到另一个 CopyIcon 制作指定图标或鼠标指针的一个副本.这个副本从属于发出调用的应用程序 CopyImage 复 ...