题目描述

在平面上有 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:
4


  1. dp[i][j][k]表示,用k个矩形,覆盖ij号点,所需要的最小面积
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<queue>
  6. #include<algorithm>
  7. #define lli long long int
  8. using namespace std;
  9. const int MAXN=;
  10. void read(int &n)
  11. {
  12. char c='+';int x=;bool flag=;
  13. while(c<''||c>'')
  14. {c=getchar();if(c=='-')flag=;}
  15. while(c>=''&&c<='')
  16. {x=x*+(c-);c=getchar();}
  17. flag==?n=-x:n=x;
  18. }
  19. int n,k;
  20. struct node
  21. {
  22. int x,y;
  23. }point[MAXN];
  24. int dp[MAXN][MAXN][];
  25. int comp(const node &a,const node &b)
  26. {
  27. if(a.y==b.y)
  28. return a.x<b.x;
  29. else
  30. return a.y<b.y;
  31. }
  32. int main()
  33. {
  34. //freopen("jxfg.in","r",stdin);
  35. //freopen("jxfg.out","w",stdout);
  36. read(n);read(k);
  37. for(int i=;i<=n;i++)
  38. {
  39. read(point[i].x);
  40. read(point[i].y);
  41. }
  42. memset(dp,0x3f,sizeof(dp));
  43. sort(point+,point+n+,comp);
  44. for(int i=;i<=n;i++)
  45. {
  46. int l,r;
  47. l=r=point[i].x;
  48. for(int j=i+;j<=n;j++)
  49. {
  50. r=max(r,point[j].x);
  51. l=min(l,point[j].x);
  52. dp[i][j][]=min(dp[i][j][],(r-l)*(point[j].y-point[i].y));
  53. }
  54. }
  55. for(int i=;i<=n;i++)
  56. for(int j=i+;j<=n;j++)
  57. for(int k=i+;k<j;k++)
  58. dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
  59.  
  60. for(int i=;i<=n;i++)
  61. for(int j=i+;j<=n;j++)
  62. for(int k=i+;k<j;k++)
  63. {
  64. dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
  65. dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
  66. }
  67. for(int i=;i<=n;i++)
  68. for(int j=i+;j<=n;j++)
  69. for(int k=i+;k<j;k++)
  70. {
  71. dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
  72. dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
  73. dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
  74. }
  75. if(dp[][n][k]==)
  76. dp[][n][k]=;
  77. printf("%d",dp[][n][k]);
  78. return ;
  79. }
  1.  

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. 洛谷——P1034 矩形覆盖

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

  6. luoguP1034 矩形覆盖 x

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

  7. 【OpenJudge 1793】矩形覆盖

    http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...

  8. NOIP2002矩形覆盖[几何DFS]

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

  9. bzoj 1185 旋转卡壳 最小矩形覆盖

    题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...

随机推荐

  1. CorelDRAW中内置的视频教程在哪里?

    CorelDRAW中内置了很多教学内容和视频教程,可以帮助用户快速学习和掌握CorelDRAW的使用方法,创作出个性化的作品.很多小伙伴表示找不到软件自带学习视频,现在小编就来告诉你. 用户可以通过两 ...

  2. js通过插件发送邮件

    这个插件为SmtpJS 官网地址为  https://www.smtpjs.com/ 方法很简单 <script src="https://smtpjs.com/v2/smtp.js& ...

  3. XML的解析方式

    //解析和输出XML public void showXml() { string filepath = Application.dataPath + @"/my.xml"; if ...

  4. PAT_A1034#Head of a Gang

    Source: PAT A1034 Head of a Gang (30 分) Description: One way that the police finds the head of a gan ...

  5. lua_自己对“lua函数”知识点的总结

    lua_自己对“lua函数”知识点的总结 1.lua函数的定义 --lua中,函数都是function类型的对象.(1)其可以被比较 (2)其可以赋值给一个对象(3)可以传递给函数(4)可以从函数中返 ...

  6. [CodeForces]1059C Sequence Transformation

    构造题. 我递归构造的,发现如果N>3的话就优先删奇数,然后就把删完的提取一个公约数2,再重复操作即可. 具体原因我觉得是因为对于一个长度大于3的序列,2的倍数总是最多,要令字典序最大,所以就把 ...

  7. TFS代码迁移Git

    描述 将TFS上的代码迁移到Git做版本控制. 参考地址 tfs-git下载:https://github.com/git-tfs/git-tfs/releases chocolatey安装:http ...

  8. 教你如何检查一个函数是否为JavaScript运行时环境内建函数

    在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题.但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持 ...

  9. mysql 数据库上传限制

  10. NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论

    1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...