平板涂色(信息学奥赛一本通-T1445)
【题目描述】
CE数码公司开发了一种名为自动涂色机(APM)的产品。它能用预定的颜色给一块由不同尺寸且互不覆盖的矩形构成的平板涂色。
为了涂色,APM需要使用一组刷子。每个刷子涂一种不同的颜色C。APM拿起一把有颜色C的刷子,并给所有颜色为C且符合下面限制的矩形涂色:
为了避免颜料渗漏使颜色混合,一个矩形只能在所有紧靠它上方的矩形涂色后,才能涂色。例如图中矩形F必须在C和D涂色后才能涂色。注意,每一个矩形必须立刻涂满,不能只涂一部分。
写一个程序求一个使APM拿起刷子次数最少的涂色方案。注意,如果一把刷子被拿起超过一次,则每一次都必须记入总数中。
【输入】
第一行为矩形的个数N。下面有N行描述了N个矩形。每个矩形有5个整数描述,左上角的y坐标和x坐标,右下角的y坐标和x坐标,以及预定颜色。
颜色号为1到20的整数。
平板的左上角坐标总是(0, 0)。
坐标的范围是0..99。N小于16。
【输出】
拿起刷子的最少次数。
【输入样例】
7
0 0 2 2 1
0 2 1 6 2
2 0 4 2 1
1 2 4 4 2
1 4 3 6 1
4 0 6 4 1
3 4 6 6 2【输出样例】
3
【源程序】
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
#define Pair pair<int,int>
const int MOD = 1E9+7;
const int N = 1000000+5;
const int dx[] = {-1,1,0,0,-1,-1,1,1};
const int dy[] = {0,0,-1,1,-1,1,-1,1};
using namespace std;struct Rectangle{int x1,y1,x2,y2;int color;
}rect[20];
bool vis[20];
bool G[40][40];
int res=15;
bool judge(int x) {if(rect[x].x1==0)return true;for(int i=rect[x].y1+1;i<=rect[x].y2;i++)if(G[rect[x].x1][i]==0)return false;return true;
}
void update(int x,int sta){for(int i=rect[x].x1+1;i<=rect[x].x2;i++)for(int j=rect[x].y1+1;j<=rect[x].y2;j++)G[i][j]=sta;
}
void dfs(int p,int k,int num,int n){//第p块板子刷第k次,累积了num块板子if(k>res)//可行性剪枝return;if(num==n)res=min(res,k);for(int i=1;i<=n;i++){if(!vis[i]&&judge(i)){update(i,1);vis[i]=true;num++;if(rect[i].color==rect[p].color)dfs(i,k,num,n);else{k++;dfs(i,k,num,n);k--;}update(i,0);vis[i]=false;num--;}}
}
int main() {int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d%d%d%d",&rect[i].x1,&rect[i].y1,&rect[i].x2,&rect[i].y2,&rect[i].color);dfs(0,0,0,n);printf("%d\n",res);return 0;
}
平板涂色(信息学奥赛一本通-T1445)相关推荐
- 《信息学奥赛一本通》提高版题单
第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...
- 信息学奥赛一本通在线提交地址
信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...
- P1283 平板涂色
P1283 平板涂色 题目描述 CE数码公司开发了一种名为自动涂色机(APM)的产品.它能用预定的颜色给一块由不同尺寸且互不覆盖的矩形构成的平板涂色. 为了涂色,APM需要使用一组刷子.每个刷子涂一种 ...
- 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”
董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...
- 信息学奥赛一本通 提高篇 第5章 矩阵乘法
例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...
- 《信息学奥赛一本通提高篇》第6章 组合数学
例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...
- 《信息学奥赛一本通 提高篇》
提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...
- 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分
信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
最新文章
- python 大数据学习 遇到的问题,及解决方法。
- word List35
- 【技术解决方案】优化FFmpeg探测网络流时间过长的问题
- webpack来打包你的vue项目,如发现你的vendor.js过大
- Rxjs的flatMap使用
- pytorch版本问题:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
- HTML5全球普及加速:有望终结iOS与安卓界限【转】
- extremecomponents-1.0.1.jar 的使用小例子
- Excel中截取特殊字符之前、之间、之后的数据
- 高一必修一 第一单元
- 【ros】初学ROS的学习笔记——创建Publisher
- 电梯控制算法(5)单电梯场景——屏蔽较近楼层进梯请求
- 算法点滴yan测试+打印
- 活用Koomail的IMAP协议功能同步Gmail邮件
- 【操作系统二】图解TCP/IP模型+实战
- 猫眼郑志昊:互联网没有价值网,就没有下半场
- 东莞横沥注塑模具设计与制造细节
- WebSphere创建概要文件
- 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题
- 如何注册免费tk域名