Vijos 1126 矩形覆盖 洛谷 P1034
2017-06-20 20:15
399 查看
描述
在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示。例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7)。
这些点可以用 k 个矩形(1<=k<=4)全部覆盖,矩形的边平行于坐标轴。当 k=2 时,可用如图二的两个矩形 s1,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
1 1
2 2
3 6
0 7
Copy
样例输出1
4
Copy
限制
每个测试点1s
来源
noip2002提高组第四题
判断矩形相交~~~
在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示。例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7)。
这些点可以用 k 个矩形(1<=k<=4)全部覆盖,矩形的边平行于坐标轴。当 k=2 时,可用如图二的两个矩形 s1,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
1 1
2 2
3 6
0 7
Copy
样例输出1
4
Copy
限制
每个测试点1s
来源
noip2002提高组第四题
判断矩形相交~~~
//NOIP题 按说测试数据不管在哪个OnlineJucge上都应该一样的 //然而在Vijos上能AC,洛谷上一个WA一个TLE //暴力搜索枚举哪一个点在哪一个矩形中 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; struct Rectangles{int l,r,t,b;bool empty;}Rect[10]; struct Pointt{int x,y;}Point[55]; int n,k,Ans_Area=1e10; bool Judge(int i,int j){ Rectangles a=Rect[i],b=Rect[j]; int dx=abs((a.r+a.l)-(b.r+b.l)),dy=abs((a.t+a.b)-(b.t+b.b)); if(dx <= a.r-a.l+b.r-b.l && dy <= a.t-a.b+b.t-b.b) return true; else return false; } bool calc(){ for(int i=1;i<k;i++){ if(Rect[i].empty==true) continue; for(int j=i+1;j<=k;j++){ if(Rect[j].empty==true) continue; if(Judge(i,j)) return false; } } return true; } void DFS(int index,int area){ if(area>Ans_Area) return; if(index==n+1){ for(int i=1;i<=k;i++) if(Rect[i].empty==true) return; Ans_Area=area;return; } int ks; for(int i=1;i<=k;i++){ Rectangles tmp=Rect[i];//暂存起来 if(Rect[i].empty==true){ Rect[i].l=Rect[i].r=Point[index].x; Rect[i].b=Rect[i].t=Point[index].y; Rect[i].empty=false; } else{ Rect[i].l=min(Rect[i].l,Point[index].x); Rect[i].r=max(Rect[i].r,Point[index].x); Rect[i].t=max(Rect[i].t,Point[index].y); Rect[i].b=min(Rect[i].b,Point[index].y); } if(calc()){ ks=(Rect[i].r-Rect[i].l)*(Rect[i].t-Rect[i].b); ks-=(tmp.r-tmp.l)*(tmp.t-tmp.b); } DFS(index+1,area+ks); Rect[i]=tmp; } } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d%d",&Point[i].x,&Point[i].y); for(int i=1;i<=k;i++) Rect[i].empty=true; DFS(1,0); printf("%d",Ans_Area); return 0; }
望过路大佬指点迷津
相关文章推荐
- 洛谷——P1034 矩形覆盖
- 洛谷 P1034 矩形覆盖
- [NOIP2002] 提高组 洛谷P1034 矩形覆盖
- 洛谷P1034 矩形覆盖
- 搜索-洛谷P1034 矩形覆盖
- 洛谷 P1034 [NOIP2002 T4] 矩形覆盖
- |洛谷|搜索|NOIP2002|P1034 矩形覆盖
- P1034 矩形覆盖
- P1034 矩形覆盖
- P1034 矩形覆盖
- 矩形覆盖
- Codeforces Round #330 (Div. 1) C. Edo and Magnets(暴力+矩形覆盖点)
- 多少个矩形被覆盖
- 矩形覆盖
- 矩形覆盖
- 九度_题目1390:矩形覆盖
- [HDOJ5091]Beam Cannon(贪心,线段树,扫描线,矩形内覆盖最多点)
- BZOJ1185 : [HNOI2007]最小矩形覆盖
- 矩形覆盖问题
- 矩形覆盖