题目是平面上n个点,要用若干个矩形盖住它们,每个矩形上至少要包含2个点,问要用的矩形的面积和最少是多少。

容易反证得出每个矩形上四个角必定至少覆盖了两个点。然后就状压DP:

  • dp[S]表示覆盖的点集为S要用的最少矩形面积

转移我一开始是未覆盖的点和已覆盖的点构成一个矩形来转移,这是错的,因为这样子的结果是所有矩形都相连的最小面积和。

正确的是枚举还未被覆盖的矩形来转移。转移我用我为人人+队列。

有一点要注意的是,覆盖(0,0)和(0,2)两点要用的矩形是1*2,所以要特判一下两点斜率0或不存在时构成的矩形。

 #include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define INF (1<<29) bool isIn(int x1,int y1,int x2,int y2,int x,int y){
if(x1>x2) swap(x1,x2);
if(y1>y2) swap(y1,y2);
return x1<=x && x<=x2 && y1<=y && y<=y2;
}
int area(int x1,int y1,int x2,int y2){
if(x1==x2) ++x2;
if(y1==y2) ++y2;
if(x1>x2) swap(x1,x2);
if(y1>y2) swap(y1,y2);
return (x2-x1)*(y2-y1);
}
int d[<<],sta[][];
bool inque[<<];
int main(){
int n,x[],y[];
while(~scanf("%d",&n) && n){
for(int i=; i<n; ++i) scanf("%d%d",x+i,y+i);
for(int i=; i<(<<n); ++i) d[i]=INF;
queue<int> que;
memset(inque,,sizeof(inque));
for(int i=; i<n; ++i){
for(int j=i+; j<n; ++j){
int s=;
for(int k=; k<n; ++k){
if(isIn(x[i],y[i],x[j],y[j],x[k],y[k])) s|=(<<k);
}
sta[i][j]=sta[j][i]=s;
if(d[s]>area(x[i],y[i],x[j],y[j])){
d[s]=area(x[i],y[i],x[j],y[j]);
if(!inque[s|sta[i][j]]){
inque[s]=;
que.push(s);
}
}
}
}
while(!que.empty()){
int s=que.front(); que.pop();
for(int i=; i<n; ++i){
for(int j=i+; j<n; ++j){
if(((s>>i)&) && ((s>>j)&)) continue;
if(d[s|sta[i][j]]>d[s]+area(x[i],y[i],x[j],y[j])){
d[s|sta[i][j]]=d[s]+area(x[i],y[i],x[j],y[j]);
if(!inque[s|sta[i][j]]){
inque[s|sta[i][j]]=;
que.push(s|sta[i][j]);
}
}
}
}
inque[s]=;
}
printf("%d\n",d[(<<n)-]);
}
return ;
}

POJ2836 Rectangular Covering(状压DP)的更多相关文章

  1. POJ 2836 Rectangular Covering (状压DP)

    题意:平面上有 n (2 ≤ n ≤ 15) 个点,现用平行于坐标轴的矩形去覆盖所有点,每个矩形至少盖两个点,矩形面积不可为0,求这些矩形的最小面积. 析:先预处理所有的矩形,然后dp[s] 表示 状 ...

  2. 【POJ3254】Corn Fields 状压DP第一次

    !!!!!!! 第一次学状压DP,其实就是运用位运算来实现一些比较,挺神奇的.. 为什么要发“!!!”因为!x&y和!(x&y)..感受一下.. #include <iostre ...

  3. poj3254 Corn Fields (状压DP)

    http://poj.org/problem?id=3254 Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissio ...

  4. poj3254状压DP入门

    G - 状压dp Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:65536KB     64bit ...

  5. 状压dp(状态压缩&&dp结合)学习笔记(持续更新)

    嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的 ...

  6. 状态压缩动态规划 状压DP

    总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...

  7. poj 3254Corn Fields (入门状压dp)

    Farmer John has purchased a lush ≤ M ≤ ; ≤ N ≤ ) square parcels. He wants to grow some yummy corn fo ...

  8. POJ 1684 Corn Fields(状压dp)

    描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ ...

  9. POJ 3254 - Corn Fields - [状压DP水题]

    题目链接:http://poj.org/problem?id=3254 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John ...

随机推荐

  1. loadrunner---<三>---菜鸟对Browser Emulation的思考

    之前在一个web是项目做性能测试,发现controller中场景运行的时候,mrdv.exe内存所耗内存在不断增加,最后报错停止了 not enough memory for new buffer i ...

  2. Forth scrum meeting - 2015/10/29

    今天下午,我们终于要到了MOOC服务器端开发人员的联系方式,于是我们小组派了三名同学去实验室与他们进行了交流,并咨询了他们一些关于API接口的问题.他们也对我们这个客户端的开发提出了一些建议. 开发团 ...

  3. 转SISD、MIMD、SIMD、MISD计算机的体系结构的Flynn分类法

    1. 计算平台介绍 Flynn于1972年提出了计算平台的Flynn分类法,主要根据指令流和数据流来分类,共分为四种类型的计算平台,如下图所示: 单指令流单数据流机器(SISD) SISD机器是一种传 ...

  4. VMware的四种网络连接方式

    mkdir  /mn/cdrom mount /dev/cdrom /mnt/cdrom Bridge:这种方式最简单,直接将虚拟网卡桥接到一个物理网卡上面,和linux下一个网卡 绑定两个不同地址类 ...

  5. java 异常处理 Throwable Error 和Exception

    Java异常类层次结构图:       异常的英文单词是exception,字面翻译就是“意外.例外”的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 比如使用 ...

  6. String to Integer

    Implement function atoi to convert a string to an integer. If no valid conversion could be performed ...

  7. Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. C ...

  8. css 属性

    部分属性在firefox 中添加-moz- safari 以及chrome  加上-webkit- opera 加上-o- ie9里可能需要-ms- jquery  中的css  操作  和一般的cs ...

  9. windows下不打开浏览器访问网页的方法

    我们打开电脑,大多时候都是打开浏览器在上网.这都是通过浏览器来实现的,然而windows下有没有办法不通过浏览器也可以像linux那样达到访问网页的目的呢?这当然少不了批处理或者VBScript.然而 ...

  10. iOS 一个工程中引用其他工程时编译的Architecture问题

    当引用了其他工程时,在编译时报错,提示你编译指令架构不对,你需要查看一下这几个工程的Architecture部分是否又冲突,比如主工程设置Valid Architecture为armv7 而 另一个子 ...