题目描述

在平面上有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_1x1​y1​
x_2 y_2x2​y2​
... ...

x_n y_nxn​yn​ (0 \le x_i,y_i \le 5000≤xi​,yi​≤500)

输出格式:

输出至屏幕。格式为:

11个整数,即满足条件的最小的矩形面积之和。

输入输出样例

输入样例#1: 复制

4 2
1 1
2 2
3 6
0 7
输出样例#1: 复制

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 矩形覆盖的更多相关文章

  1. 洛谷P1034 矩形覆盖

    P1034 矩形覆盖 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4( ...

  2. 洛谷 - P1034 - 矩形覆盖 - dfs

    https://www.luogu.org/problemnew/show/P1034 可能是数据太水了瞎搞都可以过. 判断两个平行于坐标轴的矩形相交(含顶点与边相交)的代码一并附上. 记得这里的xy ...

  3. [NOIP2002] 提高组 洛谷P1034 矩形覆盖

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  4. 洛谷——P1034 矩形覆盖

    https://www.luogu.org/problem/show?pid=1034 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的 ...

  5. 洛谷 P2218 [HAOI2007]覆盖问题 解题报告

    P2218 [HAOI2007]覆盖问题 题目描述 某人在山上种了\(N\)棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他 ...

  6. P1034 矩形覆盖

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  7. 洛谷 P1191 矩形 题解

    P1191 矩形 题目描述 给出一个 \(n \times n\)的矩阵,矩阵中,有些格子被染成白色,有些格子被染成黑色,现要求矩阵中白色矩形的数量 输入格式 第一行,一个整数\(n\),表示矩形的大 ...

  8. 洛谷——P2082 区间覆盖(加强版)

    P2082 区间覆盖(加强版) 题目描述 已知有N个区间,每个区间的范围是[si,ti],请求出区间覆盖后的总长. 输入输出格式 输入格式: N s1 t1 s2 t2 …… sn tn 输出格式: ...

  9. 洛谷 P1324 矩形分割

    P1324 矩形分割 题目描述 出于某些方面的需求,我们要把一块N×M的木板切成一个个1×1的小方块. 对于一块木板,我们只能从某条横线或者某条竖线(要在方格线上),而且这木板是不均匀的,从不同的线切 ...

随机推荐

  1. flask模板语言

    由于Django的模板引擎和Flask中的Jinja2模板引擎有很多一样的地方,所以我将一样的地方总结到了独立的文章中 https://www.cnblogs.com/kuxingseng95/art ...

  2. vue 封装分页组件

    分页 一般都是调接口, 接口为这种格式 {code: 0, msg: "success",…} code:0 data:{ content:[{content: "11& ...

  3. 命令行发送UDP

    https://www.cnblogs.com/Dennis-mi/articles/6866762.html: 如果往本地UDP端口發送數據,那麼可以使用以下命令:echo “hello” > ...

  4. grub加密。

    一.介绍 安全无小事  linux系统的安全分为很多方面,什么端口啊,什么网络啊,听着都特么烦,今天谈谈最简单明显的密码安全. 二.单用户模式 单用户模式个人觉得相当有用,可以用来修复系统,修改密码… ...

  5. [WPF自定义控件库]使用WindowChrome的问题

    1. 前言 上一篇文章介绍了使用WindowChrome自定义Window,实际使用下来总有各种各样的问题,这些问题大部分都不影响使用,可能正是因为不影响使用所以一直没得到修复(也有可能别人根本不觉得 ...

  6. 【02】[].slice和Array.prototype.slice

    [02][].slice和Array.prototype.slice 01,Array是一个构造函数.浏览器内置的特殊对象.   02,Array没有slice方法. 03,Array.prototy ...

  7. java 词频统计代码

    package hello; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.F ...

  8. Wp检查手机网络状态

    /// <summary> /// 检查网络状态 /// </summary> private void CheckNetworkState() { if (DeviceNet ...

  9. 关于EGE图形库在CodeBlocks下的配置

    非常感谢[地球]呵呵@的细心帮助,我差点都放弃了! 我这里使用的是Code::Blocks svn 10595 与 TDM-GCC 5.10 首先下载为 GCC 5.0 以上编译好的 EGE 文件,稍 ...

  10. 【JavaScript 3—基础知识点】:运算符

    导读:其实看到这个运算符的学习,很有一种熟悉感,因为在总体看来,和之前的C++有很多类似的地方,但当时觉得简单,没有总结.所以,这次一定得总结了.其实,知识的罗列,基础的积累,在学习中也很重要. 一. ...