HDU 4739 Zhuge Liang's Mines
来源:互联网 发布:淘宝亲宝贝什么意思 编辑:程序博客网 时间:2024/05/22 15:48
题意:
在一个x-y坐标系上有N颗地雷,想要挖出一个地雷只有挖出跟它形成矩形的另外三颗雷才行,问最多可以挖出多少地雷?
解题思路:
记忆化搜索+状态压缩。先把所有雷的坐标按从上到下,从左到右排序,因为最多20颗雷,可以用二进制表示每颗雷的状态。然后DFS记忆化寻找矩形(四重循环确定四个点),找到了则改变雷的二进制状态然后深搜下去,遍历出所有情况,得出最大值。
代码:
#include <cstring>#include <stdio.h>#include <algorithm>#include <iostream>#include <cmath>#include <map>#include <string>#include <queue>#include <bitset>using namespace std;struct Node{ int x,y; bool operator < (const Node &a) const { if(y==a.y) return x<a.x; return y<a.y; }}pos[30];int n;int dp[1<<20];int dfs(int s){ if(dp[s]>=0) return dp[s]; int ret=0; for(int i=0;i<n;++i) { if(s&(1<<i)) continue; for(int j=i+1;j<n;++j) { if(s&(1<<j)) continue; if(pos[j].y!=pos[i].y) continue; for(int k=j+1;k<n;++k) { if(s&(1<<k)) continue; if(pos[k].x!=pos[i].x) continue; for(int l=0;l<n;++l) { if(l==i||l==j||l==k) continue; if(s&(1<<l)) continue; if(pos[l].x!=pos[j].x||pos[l].y!=pos[k].y) continue; if((pos[l].x-pos[k].x) != (pos[k].y-pos[i].y)) continue; int ts=s|(1<<i)|(1<<j)|(1<<k)|(1<<l); ret=4+dfs(ts); } } } } dp[s]=ret; return ret;}int main(){ while(cin>>n&&n!=-1) { for(int i=0;i<n;++i) cin>>pos[i].x>>pos[i].y; sort(pos,pos+n); memset(dp,-1,sizeof(dp)); cout<<dfs(0)<<endl; } return 0;}
0 0
- 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
- hdu 4739 Zhuge Liang's Mines(状压DP)
- hdu 4739 Zhuge Liang's Mines (简单dfs)
- hdu 4739——Zhuge Liang's Mines
- hdu 4739 Zhuge Liang's Mines (水题:坑题!!!)
- HDU 4739 Zhuge Liang's Mines(状压DP)
- hdu 4739Zhuge Liang's Mines 状态压缩
- openwrt上LUCI模块配置界面开发框架 ---我的笔记(2.5)
- 跨域、sql注入、xss攻击
- 《C++ Primer》读书笔记-第二章 01 数据的内存表示
- 在公式编辑器中输入破折号的方法
- window.location属性的应用
- HDU 4739 Zhuge Liang's Mines
- 一篇好文,以在迷茫时阅读
- ES6基本语法学习笔记--let与const
- Spring Boot (二)集成Mybatis、Druid
- cpp6.1
- java(12)------static关键字
- js 执行字符串函数名
- Mybatis学习笔记二:以接口方式编程
- 围绕中心旋转动画效果