【题目链接】 http://poj.org/problem?id=2836

【题目大意】

  给出二维平面的一些点,现在用一些非零矩阵把它们都包起来,
  要求这些矩阵的面积和最小,求这个面积和

【题解】

  我们计算出以每两个点为矩形顶点所构成的矩形面积和包含的点子集,
  然后对这些子集进行状态DP,求全集的最小覆盖

【代码】

#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int N=16;
int n,dp[1<<N],x[N],y[N];
struct Rect{
int coverd,area;
Rect(const int& coverd,const int& area):coverd(coverd),area(area){}
void add(int i){coverd|=1<<i;}
};
bool in(int i,int j,int k){return((x[i]-x[k])*(x[j]-x[k])<=0)&&((y[i]-y[k])*(y[j]-y[k])<=0);}
int main(){
while(scanf("%d",&n)&&n){
for(int i=0;i<n;i++)scanf("%d%d",&x[i],&y[i]);
vector<Rect> VR;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
Rect r((1<<i)|(1<<j),max(1,abs(x[i]-x[j]))*max(1,abs(y[i]-y[j])));
if(i!=j)for(int k=0;k<n;k++)if(in(i,j,k))r.add(k);
VR.push_back(r);
}
}memset(dp,0x3f,sizeof(dp));
dp[0]=0; vector<Rect>::iterator it;
for(it=VR.begin();it!=VR.end();it++){
for(int s=0;s<(1<<n);s++){
int ns=s|it->coverd;
if(ns!=s)dp[ns]=min(dp[ns],dp[s]+it->area);
}
}printf("%d\n",dp[(1<<n)-1]);
}return 0;
}

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

  1. POJ 2836 Rectangular Covering (状压DP)

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

  2. poj 2836 Rectangular Covering(状态压缩dp)

    Description n points are given on the Cartesian plane. Now you have to use some rectangles whose sid ...

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

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

  4. POJ 3254 Corn Fields (状压dp)

    题目链接:http://poj.org/problem?id=3254 给你n*m的菜地,其中1是可以种菜的,而菜与菜之间不能相邻.问有多少种情况. 状压dp入门题,将可以种菜的状态用一个数的二进制表 ...

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

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

  6. POJ 1684 Corn Fields(状压dp)

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

  7. [ An Ac a Day ^_^ ] POJ 3254 Corn Fields 状压dp

    题意: 有一块n*m的土地 0代表不肥沃不可以放牛 1代表肥沃可以放牛 且相邻的草地不能同时放牛 问最多有多少种放牛的方法并对1e8取模 思路: 典型的状压dp 能状态压缩 能状态转移 能状态压缩的题 ...

  8. POJ 2923 Relocation(状压DP)题解

    题意:有2辆车运货,每次同时出发,n(<10),各自装货容量c1 c2,问最少运几次运完. 思路:n比较小,打表打出所有能运的组合方式,用背包求出是否能一次运走.然后状压DP运的顺序. 代码: ...

  9. poj 2836 Rectangular Covering

    Rectangular Covering Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2776   Accepted: 7 ...

随机推荐

  1. Buildroot ipa image

    参考: https://github.com/csmart/ironic-python-agent/tree/buildroot/imagebuild/buildroot#buildroot-iron ...

  2. win10&hyper上装Ubuntu出现没有找到dev fd0, sector 0 错误

    win10 hyper装 ubuntu blk_update_request:I/O error,dev sr0,sector0 错误 配置好安装重启后出现 blk_update_request: I ...

  3. Android事件分发机制详解(2)----分析ViewGruop的事件分发

    首先,我们需要 知道什么是ViewGroup,它和普通的View有什么区别? ViewGroup就是一组View的集合,它包含很多子View和ViewGroup,是Android 所有布局的父类或间接 ...

  4. URAL 1944 大水题模拟

    D - Record of the Attack at the Orbit Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format ...

  5. hexo从零开始到搭建完整 转

    http://visugar.com/2017/05/04/20170504SetUpHexoBlog/ https://liuchi.coding.me/   look me 交流群 有相关问题的可 ...

  6. 滚动数组要来回赋初值呀。。orzzzzzzzzzzzzzzzzzzzzzzzzzz

    2个小时的人参orzzzzzzzzzzzzzzz ……~(-o ̄▽ ̄)-o ...……o-(_△_o-) ~...……~(-o ̄▽ ̄)-o ...……o-(_△_o-) ~... ……~(-o ̄▽ ̄) ...

  7. Codeforces 835 F Roads in the Kingdom(树形dp)

    F. Roads in the Kingdom(树形dp) 题意: 给一张n个点n条边的无向带权图 定义不便利度为所有点对最短距离中的最大值 求出删一条边之后,保证图还连通时不便利度的最小值 $n & ...

  8. 262144 (game)

    262144 (game) 题目描述 Bessie likes downloading games to play on her cell phone, even though she does fi ...

  9. 3.3 Lucene检索原理

    Lucene是一个高效的,基于Java的全文检索库[1].所以在介绍Lucene的检索功能之前,我们要先了解一下全文检索以及Lucene的索引结构. 一.全文检索的基本原理 1. 数据的分类 什么是全 ...

  10. 在linux中启动mysql服务的命令

    用reboot命令重启linux服务器之后会导致mysql服务终止,也就是mysql服务没有启动.必须要重启mysql服务,否则启动jboss时会 报有关数据库mysql方面的错误. 命令如下: 第一 ...