[LuoguP1034][Noip2002] 矩形覆盖
[LuoguP1034][Noip2002] 矩形覆盖(Link)
在平面上有\(N\)个点,\(N\)不超过五十, 要求将这\(N\)个点用\(K\)个矩形覆盖,\(k\)不超过\(4\),要求最小化矩形之和。
其实这个题应该是十分的简单,因为2002年蓝题的难度可想而知,一般都是思路简单码量大的题。这个题思路也就是十分暴力的枚举每一个点所属的矩阵的编号,然后题目要求所有的矩形不能重叠,于是就有了一个\(Judge\)函数,最后最小化矩形面积和就可以了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
typedef long long LL ;
const int MAXN = 51 ;
const int MAXM = 51 ;
const int Inf = 1e6 ;
int N, K, Ans = Inf, P ;
struct NODE {int X, Y ;} E[MAXN] ;
struct SQUR {int X[MAXN][3], Y[MAXN][3], V[MAXN] ; } Sq[5] ;
inline int maxx(int pos,int cos){if(pos>cos)return pos;else return cos;}
inline int minn(int pos,int cos){if(pos>cos)return cos;else return pos;}
inline int Read() {
int X = 0, F = 1 ; char ch = getchar() ;
while (ch > '9' || ch < '0') F = (ch == '-' ? - 1 : 1), ch = getchar() ;
while (ch >= '0' && ch <= '9') X=(X<<1)+(X<<3)+(ch^48), ch = getchar() ;
return X * F ;
}
inline int Judge(int Now, int To) {
int X[3], Y[3] ; X[1] = Y[1] = Inf, X[2] = Y[2] = - Inf ;
X[1] = min(Sq[To].X[Now - 1][1], E[Now].X) ;
X[2] = max(Sq[To].X[Now - 1][2], E[Now].X) ;
Y[1] = min(Sq[To].Y[Now - 1][1], E[Now].Y) ;
Y[2] = max(Sq[To].Y[Now - 1][2], E[Now].Y) ;
for (int i = 1 ; i <= K ; i ++) if (i != To) {
for (int k = 1 ; k <= 2 ; k ++) {
Sq[i].X[Now][k] = Sq[i].X[Now - 1][k] ;
Sq[i].Y[Now][k] = Sq[i].Y[Now - 1][k] ;
Sq[i].V[Now] = Sq[i].V[Now - 1] ;
for (int j = 1 ; j <= 2 ; j ++) {
if (Sq[i].X[Now - 1][1] <= X[k] && Sq[i].X[Now - 1][2] >= X[k])
if (Sq[i].Y[Now - 1][1] <= Y[j] && Sq[i].Y[Now - 1][2] >= Y[j])
return Inf ;
}
}
}
Sq[To].X[Now][1] = X[1] ; Sq[To].X[Now][2] = X[2] ;
Sq[To].Y[Now][1] = Y[1] ; Sq[To].Y[Now][2] = Y[2] ;
Sq[To].V[Now] = (X[2] - X[1]) * (Y[2] - Y[1]) ;
return P = Sq[To].V[Now] - Sq[To].V[Now - 1] ;
}
inline void Dfs(int Now, int Sum) {
if (Now == N + 1)
Ans = Sum ;
else for (int i = 1 ; i <= K ; i ++)
if (Sum + Judge(Now, i) < Ans)
Dfs(Now + 1, Sum + P) ;
}
int main() {
N = Read(), K = Read() ;
for (int i = 1 ; i <= N ; i ++) E[i].X = Read(), E[i].Y = Read() ;
for (int i = 1 ; i <= 4 ; i ++)
Sq[i].X[0][1] = Sq[i].Y[0][1] = Inf,
Sq[i].X[0][2] = Sq[i].Y[0][2] = - Inf ;
Dfs(1, 0) ;
printf("%d", Ans) ;
return 0 ;
}
[LuoguP1034][Noip2002] 矩形覆盖的更多相关文章
- NOIP2002矩形覆盖[几何DFS]
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- NOIP2002 矩形覆盖
题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...
- 洛谷1034 NOIP2002 矩形覆盖
问题描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7). 这些点可以 ...
- COGS103&tyvj1899 [NOIP2002]矩形覆盖
题目里给的范围是k<=4,但是官方数据并没有k==4的情况,导致一些奇奇怪怪的DP写法也能过.听说标程在k==4的时候有反例,掀桌-.. 难怪COGS上k==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表示 ...
- bzoj 1185 旋转卡壳 最小矩形覆盖
题目大意 就是求一个最小矩形覆盖,逆时针输出其上面的点 这里可以看出,那个最小的矩形覆盖必然有一条边经过其中凸包上的两个点,另外三条边必然至少经过其中一个点,而这样的每一个点逆时针走一遍都满足单调性 ...
- [剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖
跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) ...
- UVA-11983-Weird Advertisement(线段树+扫描线)[求矩形覆盖K次以上的面积]
题意: 求矩形覆盖K次以上的面积 分析: k很小,可以开K颗线段树,用sum[rt][i]来保存覆盖i次的区间和,K次以上全算K次 // File Name: 11983.cpp // Author: ...
随机推荐
- PowerDesigner16导出SQL时如何添加注释
添加注释方法 https://jingyan.baidu.com/article/47a29f24652e44c0142399c3.html 重点是修改value的值 alter table [%QU ...
- bat批处理中如何获取前一天日期
网上找了好久在批处理中生成前一日期的代码段 但网上找到的代码对 每个月的1号和每年的1号计算前一日期时,总会报错,然后要加很多的逻辑判断 想了想,可以用.net写个EXE程序,用.net实现获取前一日 ...
- WinFrom折线图
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- bzoj P3884 上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- css专业术语笔记
1. 属性 如height.color等,称作css的属性. 2. 值 在css中,如:10px, 50%, #ccc等这些都称作css的值.比较常见的类型值有:整数值,数值,百分比值,长度值,颜色值 ...
- 【Android】利用回收机制创建ListView列表实现
MainActivity.java package com.glandroid.listviewdemo; import android.graphics.Color; import android. ...
- <!DOCTYPE> 标签是什么
DOCTYPE 标签,是html文档的类型声明(document type declaration,所谓声明,也就是宣称我他妈是谁),用来告诉浏览器,使用什么样的文档类型定义(Document Typ ...
- 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
问题描述: 有时候使用 apt-get 终端提示这样的错误信息: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/ ...
- Android解析WindowManager(二)Window的属性
前言 在上一篇文章我们学习了WindowManager体系,了解了Window和WindowManager之间的关系,这一篇我们接着来学习Window的属性. 1.概述 上一篇文章中我们讲过了Wind ...
- 常用cmd命令大全
最早的电脑系统是从DOS系统开始,DOS时代没有现在Windows这样的视窗操作界面,让你输入命令.随着电脑的发展至今,学习一些常用cmd命令大全是很有必要.大多数的程序员高手们或计算机专家在DOS系 ...