hdu 4739 Zhuge Liang's Mines (简单dfs)
来源:互联网 发布:ubuntu aptitude 编辑:程序博客网 时间:2024/05/21 19:35
Zhuge Liang's Mines
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 236 Accepted Submission(s): 107
Problem Description
In the ancient three kingdom period, Zhuge Liang was the most famous and smartest military leader. His enemy was Shima Yi, who always looked stupid when fighting against Zhuge Liang. But it was Shima Yi who laughed to the end.
Once, Zhuge Liang sent the arrogant Ma Shu to defend Jie Ting, a very important fortress. Because Ma Shu is the son of Zhuge Liang's good friend Ma liang, even Liu Bei, the Ex. king, had warned Zhuge Liang that Ma Shu was always bragging and couldn't be used, Zhuge Liang wouldn't listen. Shima Yi defeated Ma Shu and took Jie Ting. Zhuge Liang had to kill Ma Shu and retreated. To avoid Shima Yi's chasing, Zhuge Liang put some mines on the only road. Zhuge Liang deployed the mines in a Bagua pattern which made the mines very hard to remove. If you try to remove a single mine, no matter what you do ,it will explode. Ma Shu's son betrayed Zhuge Liang , he found Shima Yi, and told Shima Yi the only way to remove the mines: If you remove four mines which form the four vertexes of a square at the same time, the removal will be success. In fact, Shima Yi was not stupid. He removed as many mines as possible. Can you figure out how many mines he removed at that time?
The mine field can be considered as a the Cartesian coordinate system. Every mine had its coordinates. To simplify the problem, please only consider the squares which are parallel to the coordinate axes.
Once, Zhuge Liang sent the arrogant Ma Shu to defend Jie Ting, a very important fortress. Because Ma Shu is the son of Zhuge Liang's good friend Ma liang, even Liu Bei, the Ex. king, had warned Zhuge Liang that Ma Shu was always bragging and couldn't be used, Zhuge Liang wouldn't listen. Shima Yi defeated Ma Shu and took Jie Ting. Zhuge Liang had to kill Ma Shu and retreated. To avoid Shima Yi's chasing, Zhuge Liang put some mines on the only road. Zhuge Liang deployed the mines in a Bagua pattern which made the mines very hard to remove. If you try to remove a single mine, no matter what you do ,it will explode. Ma Shu's son betrayed Zhuge Liang , he found Shima Yi, and told Shima Yi the only way to remove the mines: If you remove four mines which form the four vertexes of a square at the same time, the removal will be success. In fact, Shima Yi was not stupid. He removed as many mines as possible. Can you figure out how many mines he removed at that time?
The mine field can be considered as a the Cartesian coordinate system. Every mine had its coordinates. To simplify the problem, please only consider the squares which are parallel to the coordinate axes.
Input
There are no more than 15 test cases.
In each test case:
The first line is an integer N, meaning that there are N mines( 0 < N <= 20 ).
Next N lines describes the coordinates of N mines. Each line contains two integers X and Y, meaning that there is a mine at position (X,Y). ( 0 <= X,Y <= 100)
The input ends with N = -1.
In each test case:
The first line is an integer N, meaning that there are N mines( 0 < N <= 20 ).
Next N lines describes the coordinates of N mines. Each line contains two integers X and Y, meaning that there is a mine at position (X,Y). ( 0 <= X,Y <= 100)
The input ends with N = -1.
Output
For each test case ,print the maximum number of mines Shima Yi removed in a line.
Sample Input
31 10 02 280 01 02 00 11 12 110 110 0-1
Sample Output
04
Source
2013 ACM/ICPC Asia Regional Hangzhou Online
思路:
将点按照y从小到大,x从小到大排序后,从前往后dfs就够了。
注意:
要考虑重点的情况。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <map>#include <stack>#include <vector>#include <set>#include <queue>#define maxn 105using namespace std;int n,m,ans;bool mp[maxn][maxn];int vis[maxn][maxn];struct Node{ int x,y;} pp[21];bool cmp(Node xx,Node yy){ if(xx.y!=yy.y) return xx.y<yy.y; if(xx.x!=yy.x) return xx.x<yy.x;}void dfs(int pos,int val){ if(ans<val) ans=val; if(pos>n||val+n-pos+1<=ans) return ; int i,j,x,y,tx,ty,edge; x=pp[pos].x; y=pp[pos].y; if(vis[x][y]<=0) dfs(pos+1,val); else { for(i=pos+1; i<=n; i++) { tx=pp[i].x; ty=pp[i].y; if(ty>y) break ; edge=tx-x; if(edge==0) continue ; if(mp[x][y+edge]&&mp[tx][y+edge]) { if(vis[x][y]<=0||vis[tx][ty]<=0||vis[x][y+edge]<=0||vis[tx][y+edge]<=0) continue ; vis[x][y]--,vis[tx][ty]--; vis[x][y+edge]--,vis[tx][y+edge]--; dfs(pos+1,val+4); vis[x][y]++,vis[tx][ty]++; vis[x][y+edge]++,vis[tx][y+edge]++; } } dfs(pos+1,val); }}int main(){ int i,j; while(scanf("%d",&n)) { if(n==-1) break ; memset(mp,0,sizeof(mp)); memset(vis,0,sizeof(vis)); for(i=1; i<=n; i++) { scanf("%d%d",&pp[i].x,&pp[i].y); mp[pp[i].x][pp[i].y]=1; vis[pp[i].x][pp[i].y]++; } sort(pp+1,pp+n+1,cmp); ans=0; dfs(1,0); printf("%d\n",ans); } return 0;}
- hdu 4739 Zhuge Liang's Mines (简单dfs)
- vector dfs 4739 Zhuge Liang's Mines
- hdu 4739Zhuge Liang's Mines(简单dfs,需要注意重点)
- hdu 4739 Zhuge Liang's Mines
- HDU 4739 Zhuge Liang's Mines
- HDU 4739 Zhuge Liang's Mines
- HDU 4739 Zhuge Liang's Mines
- hdu 4739 Zhuge Liang's Mines
- HDU 4739 Zhuge Liang's Mines
- hdu 4739 Zhuge Liang's Mines
- hdu 4739 - Zhuge Liang's Mines
- HDU 4739 Zhuge Liang's Mines
- hdu 4739 Zhuge Liang's Mines 搜索
- HDU 4739 Zhuge Liang's Mines
- HDU 4739 Zhuge Liang's Mines
- HDOJ 4739 - Zhuge Liang's Mines 暴力DFS
- hdu 4739 Zhuge Liang's Mines(状压DP)
- hdu 4739——Zhuge Liang's Mines
- 正则表达式
- 一致性Hash算法背景(转)
- mysql 中文乱码
- C++如何处理内联虚函数
- java 提高程序性能应做到的事
- hdu 4739 Zhuge Liang's Mines (简单dfs)
- LeetCode | Search Insert Position
- 前端日记 三 css3 动画(笔记)
- 如何开发一个连锁企业的信息系统(3)
- 存储器的概念和意义
- IT外企那点儿事(14): 好领导和好员工,坏领导和坏员工,鸡生蛋还是蛋生鸡?
- hdu 4745 - Two Rabbits(动规)
- 北京设计模式学习组bjdp.org第9次活动(2013.09.15)纪要
- 网页上添加聊天工具代码