P1034 矩形覆盖
题目描述
在平面上有 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)
输出格式:
输出至屏幕。格式为:
一个整数,即满足条件的最小的矩形面积之和。
输入输出样例
- 4 2
- 1 1
- 2 2
- 3 6
- 0 7
用dp[i][j][k]表示,用k个矩形,覆盖i到j号点,所需要的最小面积
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<queue>
- #include<algorithm>
- #define lli long long int
- using namespace std;
- const int MAXN=;
- void read(int &n)
- {
- char c='+';int x=;bool flag=;
- while(c<''||c>'')
- {c=getchar();if(c=='-')flag=;}
- while(c>=''&&c<='')
- {x=x*+(c-);c=getchar();}
- flag==?n=-x:n=x;
- }
- int n,k;
- struct node
- {
- int x,y;
- }point[MAXN];
- int dp[MAXN][MAXN][];
- int comp(const node &a,const node &b)
- {
- if(a.y==b.y)
- return a.x<b.x;
- else
- return a.y<b.y;
- }
- int main()
- {
- //freopen("jxfg.in","r",stdin);
- //freopen("jxfg.out","w",stdout);
- read(n);read(k);
- for(int i=;i<=n;i++)
- {
- read(point[i].x);
- read(point[i].y);
- }
- memset(dp,0x3f,sizeof(dp));
- sort(point+,point+n+,comp);
- for(int i=;i<=n;i++)
- {
- int l,r;
- l=r=point[i].x;
- for(int j=i+;j<=n;j++)
- {
- r=max(r,point[j].x);
- l=min(l,point[j].x);
- dp[i][j][]=min(dp[i][j][],(r-l)*(point[j].y-point[i].y));
- }
- }
- for(int i=;i<=n;i++)
- for(int j=i+;j<=n;j++)
- for(int k=i+;k<j;k++)
- dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
- for(int i=;i<=n;i++)
- for(int j=i+;j<=n;j++)
- for(int k=i+;k<j;k++)
- {
- dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
- dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
- }
- for(int i=;i<=n;i++)
- for(int j=i+;j<=n;j++)
- for(int k=i+;k<j;k++)
- {
- dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
- dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
- dp[i][j][]=min(dp[i][j][],dp[i][k][]+dp[k+][j][]);
- }
- if(dp[][n][k]==)
- dp[][n][k]=;
- printf("%d",dp[][n][k]);
- return ;
- }
P1034 矩形覆盖的更多相关文章
- 洛谷P1034 矩形覆盖
P1034 矩形覆盖 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4( ...
- 洛谷 P1034 矩形覆盖
P1034 矩形覆盖 题目描述 在平面上有nn个点(n \le 50n≤50),每个点用一对整数坐标表示.例如:当 n=4n=4 时,44个点的坐标分另为:p_1p1(1,11,1),p_2p2( ...
- 洛谷 - 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个点的 ...
- luoguP1034 矩形覆盖 x
P1034 矩形覆盖 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4( ...
- 【OpenJudge 1793】矩形覆盖
http://noi.openjudge.cn/ch0405/1793/ 好虐的一道题啊. 看数据范围,一眼状压,然后调了好长时间QwQ 很容易想到覆盖的点数作为状态,我用状态i表示至少覆盖状态i表示 ...
- NOIP2002矩形覆盖[几何DFS]
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- bzoj 1185 旋转卡壳 最小矩形覆盖
题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...
随机推荐
- CorelDRAW中内置的视频教程在哪里?
CorelDRAW中内置了很多教学内容和视频教程,可以帮助用户快速学习和掌握CorelDRAW的使用方法,创作出个性化的作品.很多小伙伴表示找不到软件自带学习视频,现在小编就来告诉你. 用户可以通过两 ...
- js通过插件发送邮件
这个插件为SmtpJS 官网地址为 https://www.smtpjs.com/ 方法很简单 <script src="https://smtpjs.com/v2/smtp.js& ...
- XML的解析方式
//解析和输出XML public void showXml() { string filepath = Application.dataPath + @"/my.xml"; if ...
- 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 ...
- lua_自己对“lua函数”知识点的总结
lua_自己对“lua函数”知识点的总结 1.lua函数的定义 --lua中,函数都是function类型的对象.(1)其可以被比较 (2)其可以赋值给一个对象(3)可以传递给函数(4)可以从函数中返 ...
- [CodeForces]1059C Sequence Transformation
构造题. 我递归构造的,发现如果N>3的话就优先删奇数,然后就把删完的提取一个公约数2,再重复操作即可. 具体原因我觉得是因为对于一个长度大于3的序列,2的倍数总是最多,要令字典序最大,所以就把 ...
- TFS代码迁移Git
描述 将TFS上的代码迁移到Git做版本控制. 参考地址 tfs-git下载:https://github.com/git-tfs/git-tfs/releases chocolatey安装:http ...
- 教你如何检查一个函数是否为JavaScript运行时环境内建函数
在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题.但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持 ...
- mysql 数据库上传限制
- NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论
1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...