题目描述

在平面上有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. shell脚本,计算输入给定的数,判断最大值,最小值,总和?

    [root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...

  2. 用函数式编程思维解析anagrams函数

    //函数式编程思维分析 这个排列函数 const anagrams = str => { if (str.length <= 2) return str.length === 2 ? [s ...

  3. Luogu P4231 三步必杀 (差分)

    目录 题目 题解 题目 题目链接 题目背景 (三)旧都 离开狭窄的洞穴,眼前豁然开朗. 天空飘着不寻常的雪花. 一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音. 这是由被人们厌恶的鬼 ...

  4. How To Configure VMware fencing using fence

    本文主要简单介绍一下如何在RHEL 7 Pacemaker中配置一个fence_vmware_soap类型的STONITH设备(仅供测试学习). STONITH是Shoot-The-Other-Nod ...

  5. BRVAH(让RecyclerView变得更高效) (2)

    本文来自网易云社区 作者:吴思博 1.2 宫格和列表的混排样式 关于 Grid 和List 的混排样式,Grid 样式是一行有多个,而 List样式是一行只有一个. 我们可以把 List 样式看成是G ...

  6. wireshark抓文件上传的包的结果记录

    如果我们再一个表单中放了一个text的input 还放了一个file的input进行文件上传,此时用wireshark抓到的包应该是什么样子的呢 html代码 <form action=&quo ...

  7. .NET重构(八):周结账单中,给报表添加参数

    导读:进行完了日结报表的制作,大松一口气.不过,刚开始看着周结账单中的两个参数问题,也是愁了很久.不过,只要思想不滑坡,办法总比困难多.接下来,就写写我制作周结账单报表的过程. 一.添加参数 1,在日 ...

  8. 九度oj 题目1140:八皇后

    题目描述: 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的 ...

  9. 刷题总结——切蛋糕(ssoj)

    题目: 切蛋糕 (cake.cpp/c/pas) [问题描述] BG 有一块细长的蛋糕,长度为�. 有一些人要来BG 家里吃蛋糕, BG把蛋糕切成了若干块(整数长度),然后分给这些人.为了公平,每个人 ...

  10. 常州模拟赛d4t3 字符串划分

    题目描述 给你一串由小写字母组成的字符串,希望你把它划分成一些小段,使得每一小段字符串中的字母 都不相同,并且希望分的段数尽量少. 然后,把这些小段按字典序排序后输出,中间由一个空格分隔. 例如:字符 ...