POJ 2836:Rectangular Covering(状态压缩DP)
题目大意:在一个平面内有若干个点,要求用一些矩形覆盖它们,一个矩形至少覆盖两个点,可以相互重叠,求矩形最小总面积。
分析:
数据很小,很容易想到状压DP,我们把点是否被覆盖用0,1表示然后放在一起得到一个最多15位的二进制数字作为状态,对于每种状态枚举矩形,进行覆盖。
要进行一个预处理,将每种矩形多覆盖的点状态保存下来,并计算面积,然后就是DP了。
状态转移方程f[s2]=min(f[s2],f[s1]+area) s1为原来状态,s2表示后来放置矩形后的状态。
因为可以重复覆盖,计算s2不是s2=s1+a[i](a[i]为i矩形的覆盖状态),而是s2=s1 or a[i],因为用或运算,我们不能采取常用的枚举覆盖后状态,推出覆盖前状态这样进行DP,因为一个该矩形i覆盖后的状态可能对应多个原始状态(因为or),所以要枚举初始状态,再计算后来状态求解。
最后要注意当两个点在同一条平行于坐标轴的直线上时,它们对应的矩形长或宽为1.
代码:
program Rec;
var
f:array[..]of longint;
x,y:array[..]of longint;
a,s:array[..]of longint;
n,i,m,num,j,k:longint;
function max(x,y:longint):longint;
begin
if x>y then max:=x else max:=y;
end;
function min(x,y:longint):longint;
begin
if x<y then min:=x else min:=y;
end;
procedure workfirst;
var i,j:longint;
begin
m:=;
fillchar(a,sizeof(a),); fillchar(s,sizeof(s),);
num:= shl n-;
for i:= to num do f[i]:=maxlongint;
f[]:=;
end;
procedure workread;
var i,j,k,maxx,minx,maxy,miny:longint;
begin
for i:= to n do readln(x[i],y[i]);
for i:= to n do
for j:= to i- do
begin
maxx:=max(x[i],x[j]); maxy:=max(y[i],y[j]);
minx:=min(x[i],x[j]); miny:=min(y[i],y[j]); inc(m);
for k:= to n do
if (x[k]>=minx)and(x[k]<=maxx)and(y[k]>=miny)and(y[k]<=maxy) then
inc(a[m], shl (k-));
s[m]:=max(,(maxx-minx))*max(,(maxy-miny));
end;
end;
procedure workdp;
var i,j,k:longint;
begin
for i:= to num do
if f[i]<>maxlongint then
for j:= to m do
if i<>a[j] then f[i or a[j]]:=min(f[i or a[j]],f[i]+s[j]);
end;
begin
assign(input,'Rec.in');
reset(input);
assign(output,'Rec.out');
rewrite(output);
readln(n);
while n<> do
begin
workfirst;
workread;
workdp;
writeln(f[num]);
readln(n);
end;
close(input); close(output);
end.
POJ 2836:Rectangular Covering(状态压缩DP)的更多相关文章
- poj 2836 Rectangular Covering(状态压缩dp)
Description n points are given on the Cartesian plane. Now you have to use some rectangles whose sid ...
- POJ 2836 Rectangular Covering (状压DP)
题意:平面上有 n (2 ≤ n ≤ 15) 个点,现用平行于坐标轴的矩形去覆盖所有点,每个矩形至少盖两个点,矩形面积不可为0,求这些矩形的最小面积. 析:先预处理所有的矩形,然后dp[s] 表示 状 ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- POJ 3691 (AC自动机+状态压缩DP)
题目链接: http://poj.org/problem?id=3691 题目大意:给定N个致病DNA片段以及一个最终DNA片段.问最终DNA片段最少修改多少个字符,使得不包含任一致病DNA. 解题 ...
- POJ 1321 棋盘问题(状态压缩DP)
不总结的话, 同一个地方会 WA 到死 思路: 状态压缩 DP. 1. s 表示压缩状态, 若第 i 列放了棋子, 那么该列置 1, 否则该列置 0. 假如 s = 3(0x011) 那么表示棋盘的第 ...
- POJ 3254 Corn Fields (状态压缩DP)
题意:在由方格组成的矩形里面种草,相邻方格不能都种草,有障碍的地方不能种草,问有多少种种草方案(不种也算一种方案). 分析:方格边长范围只有12,用状态压缩dp好解决. 预处理:每一行的障碍用一个状态 ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- poj 2836 Rectangular Covering
Rectangular Covering Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2776 Accepted: 7 ...
- POJ 3254 Corn Fields 状态压缩DP (C++/Java)
id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...
- POJ 3254 Corn Fields状态压缩DP
下面有别人的题解报告,并且不止这一个状态压缩题的哦···· http://blog.csdn.net/accry/article/details/6607703 下面是我的代码,代码很挫,绝对有很大的 ...
随机推荐
- Android(java)学习笔记87:Android音视频MediaRecorder用法
1. Android语音录制可以通过 MediaRecorder 和 AudioRecorder: MediaRecorder本来是多媒体录制控件,可以同时录制视频和语音,当不指定视频源时就只录制语 ...
- 【洛谷2577】[ZJOI2005] 午餐(较水DP)
点此看题面 大致题意: 有\(N\)个学生去食堂打饭,每个学生有两个属性:打饭时间\(a_i\)和吃饭时间\(b_i\).现要求将这些学生分成两队分别打饭,求最早何时所有人吃完饭. 贪心 首先,依据贪 ...
- 获取屏幕上的某个控件相对位置,尤其是tableviewcell上的某一个控件的相对位置
我的需求就是tableviewcell上的按钮,点击就会出现一个弹框: 主要就是获取,所点击的cell上控件的相对位置: CGPoint buttonCenter = CGPointMake(btn. ...
- React后台管理系统-file-uploader组件
1.React文件上传组件github地址: https://github.com/SoAanyip/React-FileUpload 2.Util里边新建file-uploader文件夹,里边新建i ...
- Math类小结
package com.swift; public class MathDemo { public static void main(String[] args) { // TODO Auto-gen ...
- scrapy使用流程
安装:通过pip install scrapy即可安装 在ubuntu上安装scrapy之前,需要先安装以下依赖:sudo apt-get install python3-dev build-esse ...
- tcl之list操作
- javascript简易日历制作
学习记录 01.练习数组的用法 02.理解this.index的用法 03.绑定事件深入练习理解 html代码 <div id="date"> <ul id=&q ...
- A1031 Hello World for U (20)(20 分)
A1031 Hello World for U (20)(20 分) Given any string of N (>=5) characters, you are asked to form ...
- Spring.Net初认识——竹子整理
留个脚印,过两天总结. 看到知乎上有人对于DI|IOC 的解释,满不错,收藏下先 作者:OneNoodle链接:http://www.zhihu.com/question/23277575/answe ...