HDU 4739 Zhuge Liang's Mines (状态压缩+背包DP)
题意
给定平面直角坐标系内的N(N <= 20)个点,每四个点构成一个正方形可以消去,问最多可以消去几个点。
思路
比赛的时候暴力dfs+O(n^4)枚举写过了……无意间看到有题解用状压DP(这才是正解吧T_T),然后自己才恍然大悟- -……
点不多嘛,用一个20位的整数表示各个点。先O(n^4)枚举出所有正方形情况,然后把这20位当背包,每种情况的二进制位当物品,做01背包就可以了.
似乎遇到N = 10+、20+的都应该想想状态压缩>.<……
代码
[cpp]
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#define MID(x,y) ((x+y)/2)
#define MEM(a,b) memset(a,b,sizeof(a))
#define REP(i, begin, end) for (int i = begin; i <= end; i ++)
using namespace std;
vector <int> v;
struct Point{
int x, y;
}p[25];
bool cmp(Point p1, Point p2){
if (p1.x == p2.x)
return p1.y < p2.y;
else return p1.x < p2.x;
}
int dp[1050000];
int main(){
int n;
while(scanf("%d", &n)){
if (n < 0) break;
for (int i = 0; i < n; i ++){
scanf("%d %d", &p[i].x, &p[i].y);
}
sort(p, p+n, cmp);
v.clear();
for (int i = 0; i < n; i ++)
for (int j = i + 1; j < n; j ++)
if (p[i].x == p[j].x){
int dy = abs(p[i].y - p[j].y);
for (int k = j + 1; k < n; k ++)
if (p[k].y == p[i].y && p[k].x == p[i].x + dy)
for (int l = k + 1; l < n; l ++){
if (p[l].y == p[j].y && p[l].x == p[i].x + dy)
v.push_back((1<<i)|(1<<j)|(1<<k)|(1<<l));
}
}
MEM(dp, 0);
int res = 0;
for (int i = 0; i < (int)v.size(); i ++){
for (int mk = (1<<n)-1; mk >= 0; mk --){
if ((mk & v[i]) == v[i])
dp[mk] = max(dp[mk], dp[mk-v[i]]+4);
res = max(res, dp[mk]);
}
}
printf("%d\n", res);
}
return 0;
}
[/cpp]
HDU 4739 Zhuge Liang's Mines (状态压缩+背包DP)的更多相关文章
- hdu 4739 Zhuge Liang's Mines 随机化
Zhuge Liang's Mines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...
- hdu 4739 Zhuge Liang's Mines (简单dfs)
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4739 Zhuge Liang's Mines (2013杭州网络赛1002题)
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4739 Zhuge Liang's Mines DFS
http://acm.hdu.edu.cn/showproblem.php?pid=4739 题意: 给定100*100的矩阵中n(n<= 20)个点,每次只能一走能够形成正方形的四个点,正方形 ...
- hdu 4739 Zhuge Liang's Mines
一个简单的搜索题,唉…… 当时脑子抽了,没做出来啊…… 代码如下: #include<iostream> #include<stdio.h> #include<algor ...
- HDOJ 4739 Zhuge Liang's Mines
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4057 AC自己主动机+状态压缩dp
http://acm.hdu.edu.cn/showproblem.php?pid=4057 Problem Description Dr. X is a biologist, who likes r ...
- 2013 ACM/ICPC Asia Regional Hangzhou Online hdu4739 Zhuge Liang's Mines
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- [HDU 4336] Card Collector (状态压缩概率dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题目大意:有n种卡片,需要吃零食收集,打开零食,出现第i种卡片的概率是p[i],也有可能不出现卡 ...
随机推荐
- PHP实现excel导出
首先去下载PHPExcel类,地址http://phpexcel.codeplex.com/ 方法如下第一步引入这个扩展类 Vendor('PHPExcel'); 第二部就是方法了,下面简单的实现方法 ...
- phpcms发布到服务器修改
请进行以下步骤的修改: 1.修改/caches/configs/system.php里面所有和域名有关的,把以前的老域名修改为新域名就可以了. 2.进行后台设置->站点管理 对相应的站点的域名进 ...
- 启动secondarynamenode时报错
环境: mac系统 + hadoop2.6.0-cdh5.7.0伪分布式 问题一: 在启动hdfs的secondarynamenode时,报错. 正常情况: sumengdeMacBook-Pro: ...
- The 15th UESTC Programming Contest Preliminary M - Minimum C0st cdoj1557
地址:http://acm.uestc.edu.cn/#/problem/show/1557 题目: Minimum C0st Time Limit: 3000/1000MS (Java/Others ...
- mysql更新子查询中的内容
UPDATE t_finance_certify_copy c SET c.biz_type=2,c.sub_biz_type=18WHERE c.finance_certify_id IN(SELE ...
- Paper List ABOUT Deep Learning
Deep Learning 方向的部分 Paper ,自用.一 RNN 1 Recurrent neural network based language model RNN用在语言模型上的开山之作 ...
- WeX5基础
最近在研究微信app开发,使用的是WeX5,在这里把一些基础知识点记录下来,忘记了可以翻阅查看. 一:开发后端服务 1.建立数据源:窗口--首选项--studio配置--数据源--增加--数据源类型选 ...
- c++对txt文件的读取与写入
转自:http://blog.csdn.net/lh3325251325/article/details/4761575 #include <iostream> #include < ...
- Autowire
Field userService in com.demo.web.Controller.HomeController required a single bean, but 2 were found ...
- go panic recover 异常处理
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...