https://www.luogu.org/problem/show?pid=1034

题目描述

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

这些点可以用 k 个矩形(1<=k<=4)全部覆盖,矩形的边平行于坐标轴。当 k=2 时,可用如图二的两个矩形 sl,s2 覆盖,s1,s2 面积和为 4。问题是当 n 个点坐标和 k 给出后,怎样才能使得覆盖所有点的 k 个矩形的面积之和为最小呢。约定:覆盖一个点的矩形面积为 0;覆盖平行于坐标轴直线上点的矩形面积也为0。各个矩形必须完全分开(边线与顶点也都不能重合)。

输入输出格式

输入格式:

n k xl y1 x2 y2 ... ...

xn yn (0<=xi,yi<=500)

输出格式:

输出至屏幕。格式为:

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

输入输出样例

输入样例#1:

  1. 4 2
  2. 1 1
  3. 2 2
  4. 3 6
  5. 0 7
输出样例#1:

  1. 4

回溯+剪枝

搜索每个点,每次更新出矩阵的大小,当有矩阵彼此覆盖时,当前方案不可行、

  1. #include <algorithm>
  2. #include <cstdio>
  3.  
  4. inline void read(int &x)
  5. {
  6. x=; register char ch=getchar();
  7. for(; ch>''||ch<''; ) ch=getchar();
  8. for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
  9. }
  10. const int N();
  11. int n,k,x[],y[];
  12. int ans=0x3f3f3f3f;
  13. struct Matrix {
  14. int x1,y1,x2,y2;
  15. bool use;
  16. Matrix() { use=; }
  17. }matrix[];
  18.  
  19. #define max(a,b) (a>b?a:b)
  20. #define min(a,b) (a<b?a:b)
  21. inline bool _if(int x,int y,Matrix a)
  22. {
  23. return x>=a.x1&&x<=a.x2&&y>=a.y1&&y<=a.y2;
  24. }
  25. inline bool if_(Matrix a,Matrix b)
  26. {
  27. if(_if(a.x1,a.y1,b)) return true;
  28. if(_if(a.x2,a.y1,b)) return true;
  29. if(_if(a.x1,a.y2,b)) return true;
  30. if(_if(a.x2,a.y2,b)) return true;
  31. return false;
  32. }
  33. void DFS(int now)
  34. {
  35. Matrix tmp; int sum=;
  36. for(int i=; i<=k; ++i)
  37. {
  38. if(!matrix[i].use) continue;
  39. sum+=(matrix[i].x2-matrix[i].x1)*
  40. (matrix[i].y2-matrix[i].y1);
  41. for(int j=i+; j<=k; ++j)
  42. if(matrix[j].use&&if_(matrix[i],matrix[j])) return ;
  43. }
  44. if(sum>ans) return ;
  45. if(now>n) { ans=sum; return ; }
  46. for(int i=; i<=k; ++i)
  47. {
  48. tmp=matrix[i];
  49. if(!matrix[i].use)
  50. {
  51. matrix[i].use=;
  52. matrix[i].x1=matrix[i].x2=x[now];
  53. matrix[i].y1=matrix[i].y2=y[now];
  54. }
  55. else
  56. {
  57. matrix[i].x1=min(matrix[i].x1,x[now]);
  58. matrix[i].x2=max(matrix[i].x2,x[now]);
  59. matrix[i].y1=min(matrix[i].y1,y[now]);
  60. matrix[i].y2=max(matrix[i].y2,y[now]);
  61. }
  62. DFS(now+); matrix[i]=tmp;
  63. } return ;
  64. }
  65.  
  66. int Presist()
  67. {
  68. read(n);read(k);
  69. for(int i=; i<=n; ++i)
  70. read(x[i]),read(y[i]);
  71. DFS(); printf("%d\n",ans);
  72. return ;
  73. }
  74.  
  75. int Aptal=Presist();
  76. int main(){;}

洛谷——P1034 矩形覆盖的更多相关文章

  1. 洛谷P1034 矩形覆盖

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

  2. 洛谷 P1034 矩形覆盖

    P1034 矩形覆盖 题目描述 在平面上有nn个点(n \le 50n≤50),每个点用一对整数坐标表示.例如:当 n=4n=4 时,44个点的坐标分另为:p_1p1​(1,11,1),p_2p2​( ...

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

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

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

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

  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. 数据库登陆失败原因: 未与信任 SQL Server 连接相关联

    解决方案:用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 问题简述: 用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联. 说明: 执行当前 ...

  2. Android开发之Thread类分析 (转载)

    转自:http://blog.csdn.net/llping2011/article/details/9706599 在我们Linux系统中创建线程函数为:pthread_create(),在Andr ...

  3. js的时间展示

    <script type="text/javascript">$(function() { //方法调用    showtime();        //默认加载首页  ...

  4. [Swift通天遁地]七、数据与安全-(8)创建普通PDF文档和加密PDF文档

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. jdk11安装没有jre文件夹

    原因:jdk11安装之后是没有jre的 如果需要jre,需要到jdk目录下面去    打开命令窗口,然后执行如下命令:    bin\jlink.exe --module-path jmods --a ...

  6. 移动web——轮播图

    1.我们将5张图片又前后各增加一张,第一张前增加的是原本的第五张,第五张后增加的是原本的第一张,增加的原因无非是手指滑动的时候有轮播效果,这不像以前的轮播图,点击图标就能立刻将ul跳转到指定位置,手机 ...

  7. JS——行内式注册事件

    html中行内调用function的时候,是通过window调用的function,所以打印this等于打印window,所以在使用行内注册事件时务必传入参数this <!DOCTYPE htm ...

  8. SQL Server2008 数据库日志清理

    USE [master] --运行master数据库 GO ALTER DATABASE HIS_MHYW SET RECOVERY SIMPLE WITH NO_WAIT --库 (dh_emr) ...

  9. Lazarus 1.44升级到1.6 UTF8处理发生变化了

    首先这里真的要强调一下,由于Freepascal升级到3.0后,FPC的内部将整个代码处理由AnsiString改为了UTF8编码(RTL with default codepage UTF-8). ...

  10. (转)Hadoop入门进阶课程

    http://blog.csdn.net/yirenboy/article/details/46800855 1.Hadoop介绍 1.1Hadoop简介 Apache Hadoop软件库是一个框架, ...