洛谷 P1034 矩形覆盖
题目描述
在平面上有nn个点(n \le 50n≤50),每个点用一对整数坐标表示。例如:当 n=4n=4 时,44个点的坐标分另为:p_1p1(1,11,1),p_2p2(2,22,2),p_3p3(3,63,6),P_4P4(0,70,7),见图一。
这些点可以用kk个矩形(1 \le k \le 41≤k≤4)全部覆盖,矩形的边平行于坐标轴。当 k=2k=2 时,可用如图二的两个矩形 s_1,s_2s1,s2 覆盖,s_1,s_2s1,s2 面积和为44。问题是当nn个点坐标和kk给出后,怎样才能使得覆盖所有点的kk个矩形的面积之和为最小呢?
约定:覆盖一个点的矩形面积为00;覆盖平行于坐标轴直线上点的矩形面积也为00。各个矩形必须完全分开(边线与顶点也都不能重合)。
输入输出格式
输入格式:
n knk
x_1 y_1x1y1
x_2 y_2x2y2
... ...
x_n y_nxnyn (0 \le x_i,y_i \le 5000≤xi,yi≤500)
输出格式:
输出至屏幕。格式为:
11个整数,即满足条件的最小的矩形面积之和。
输入输出样例
4 2
1 1
2 2
3 6
0 7
4
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int x[],y[];
int n,k,val,ans=0x7f7f7f7f;
struct nond{
int l,r,u,d;
bool flag;
}v[];
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
bool jud(int i,int j){
if(v[i].l<=v[j].l&&v[i].r>=v[j].l&&v[i].d>=v[j].d&&v[i].u<=v[j].d) return true;
if(v[i].l<=v[j].r&&v[i].r>=v[j].r&&v[i].d>=v[j].d&&v[i].u<=v[j].d) return true;
if(v[i].l<=v[j].l&&v[i].r>=v[j].l&&v[i].d>=v[j].u&&v[i].u<=v[j].u) return true;
if(v[i].l<=v[j].r&&v[i].r>=v[j].r&&v[i].d>=v[j].u&&v[i].u<=v[j].u) return true;
return false;
}
bool judge(){
for(int i=;i<=k;i++)
if(v[i].flag)
for(int j=;j<i;j++)
if(v[j].flag)
if(jud(i,j)) return true;
return false;
}
void dfs(int now){
if(judge()) return ;
val=;
for(int i=;i<=k;i++)
if(v[i].flag)
val+=(v[i].r-v[i].l)*(v[i].d-v[i].u);
if(val>ans) return ;
if(now==n+){
ans=val;
return ;
}
for(int i=;i<=k;i++)
if(!v[i].flag){
v[i].l=y[now];v[i].r=y[now];
v[i].u=x[now];v[i].d=x[now];
v[i].flag=;
dfs(now+);
v[i].flag=;
}
else if(v[i].flag){
int a=v[i].l,b=v[i].r,c=v[i].u,d=v[i].d;
v[i].l=min(v[i].l,y[now]);
v[i].r=max(v[i].r,y[now]);
v[i].u=min(v[i].u,x[now]);
v[i].d=max(v[i].d,x[now]);
dfs(now+);
v[i].l=a;v[i].r=b;
v[i].u=c;v[i].d=d;
}
}
int main(){
n=read();k=read();
for(int i=;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
dfs();
cout<<ans;
}
洛谷 P1034 矩形覆盖的更多相关文章
- 洛谷P1034 矩形覆盖
P1034 矩形覆盖 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4( ...
- 洛谷 - P1034 - 矩形覆盖 - dfs
https://www.luogu.org/problemnew/show/P1034 可能是数据太水了瞎搞都可以过. 判断两个平行于坐标轴的矩形相交(含顶点与边相交)的代码一并附上. 记得这里的xy ...
- [NOIP2002] 提高组 洛谷P1034 矩形覆盖
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- 洛谷——P1034 矩形覆盖
https://www.luogu.org/problem/show?pid=1034 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的 ...
- 洛谷 P2218 [HAOI2007]覆盖问题 解题报告
P2218 [HAOI2007]覆盖问题 题目描述 某人在山上种了\(N\)棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他 ...
- P1034 矩形覆盖
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- 洛谷 P1191 矩形 题解
P1191 矩形 题目描述 给出一个 \(n \times n\)的矩阵,矩阵中,有些格子被染成白色,有些格子被染成黑色,现要求矩阵中白色矩形的数量 输入格式 第一行,一个整数\(n\),表示矩形的大 ...
- 洛谷——P2082 区间覆盖(加强版)
P2082 区间覆盖(加强版) 题目描述 已知有N个区间,每个区间的范围是[si,ti],请求出区间覆盖后的总长. 输入输出格式 输入格式: N s1 t1 s2 t2 …… sn tn 输出格式: ...
- 洛谷 P1324 矩形分割
P1324 矩形分割 题目描述 出于某些方面的需求,我们要把一块N×M的木板切成一个个1×1的小方块. 对于一块木板,我们只能从某条横线或者某条竖线(要在方格线上),而且这木板是不均匀的,从不同的线切 ...
随机推荐
- CS193p Lecture 4 - Foundation, Attributed Strings
消息机制 调用一个实例(instance)的方法(method),就是向该实例的指针发送消息(message),实例收到消息后,从自身的实现(implementation)中寻找响应这条消息的方法. ...
- 数据库事务ACID和事务的隔离级别
借鉴:https://blog.csdn.net/zh521zh/article/details/69400053和https://blog.csdn.net/May_3/article/detail ...
- Windows10系统可以禁止的服务(按名称排序)
1.Application LayerGateway Service(Windows必须禁止的10项服务) 2.Bluetooth Handsfree Service(没有蓝牙的用户可以关闭) 3.B ...
- 微信小程序 wx.request POST请求------中文乱码问题
问题: 一个简单的表单,提交后台返回数据“提交成功”. 以为没问题了,但是没过多久后台小哥就问为啥那么多乱码,找了很久原因,发现在提交的时候就已经乱码了. 嗯,前端问题,然后测试GET/POST方法. ...
- windows下升级pip失败,重新安装pip最新版本
环境: python3.6.5 32bit,后改为python3.4.3 32bit pycharm2018旗舰版 问题: pycharm里的pip一直无法升级到10.0.1版本,在cmd中使用升级命 ...
- (转)UITextField
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...
- 剑指Offer(书):合并两个排序的列表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 递归版本: public ListNode Merge(ListNode list1,ListNod ...
- gnu make规则记录
1. $(shell CMD) 名称: 执行 shell 命令函数 功能: 在新的 shell 中执行 CMD 命令 返回值: CMD 在 shell 中执行的结果 例如:PLATFORM=$(she ...
- python基础学习笔记——开发规范
> 编码 1 2 3 4 5 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- 用于设置编辑器,默认保存为 utf-8 格式. > 注释 ...
- linux 使用mail 发送邮件
配置: /etc/mail.rc 追加配置参数 set from=lynctest@iclinux.com smtp="mail.iclinux.com"smtp-auth-use ...