思路

看到n<16 整个坐标<100 肯定想到暴力啊

蒟蒻来一发最简单易懂的题解(因为不会DP哈

首先我们用map数组来存坐标图 **注意前面的坐标需要加1 **

因为输入的是坐标 而我们需要的是格子(后面同理)

随后一个结构体存下坐标和颜色 还有判断是否涂过

开始搜索时只要从最顶上的几个开始搜索

搜索时有两种情况

  • 当颜色一样时 就不用多算拿笔数
  • 当颜色不一样时 就要算拿笔数

加上个最优性剪枝可以跑得飞快 33ms

吐槽:这数据也太水了 本蒟蒻一开始判断写反了还有75分的说

代码

#include<iostream>
using namespace std;
#define maxn 110
int n,num,ans=1e9+7;
int map[maxn][maxn];//存图
struct sq
{
int x1;
int x2;
int y1;
int y2;
int col;
bool vis;//判断是否涂色
}a[21];
void cinn()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].x1>>a[i].y1>>a[i].x2>>a[i].y2>>a[i].col;
a[i].vis=0;
for(int j=a[i].x1+1;j<=a[i].x2;j++)
for(int k=a[i].y1+1;k<=a[i].y2;k++)
map[j][k]=a[i].col;//保存颜色
}
}
void add(int x)//涂色后为0
{
for(int j=a[x].x1+1;j<=a[x].x2;j++)
for(int k=a[x].y1+1;k<=a[x].y2;k++)
map[j][k]=0;
}
void del(int x)//清除涂色
{
for(int j=a[x].x1+1;j<=a[x].x2;j++)
for(int k=a[x].y1+1;k<=a[x].y2;k++)
map[j][k]=a[x].col;
}
int pd(int x)//判断上面是否涂色
{
for(int i=a[x].y1+1;i<=a[x].y2;i++)
if(map[a[x].x1][i]!=0) return 0;//如果上面有一格没涂就不能涂这格
return 1;
}
void dfs(int now,int sum,int cnt)
{
if(sum>ans) return;//最优性剪枝
if(cnt==n)//当所有矩形都涂色完成
{
ans=sum; //不用取最小值 因为前面的剪枝已经把大于最优解剪掉了
return;
}
for(int i=1;i<=n;i++)//枚举矩形
{
if(!a[i].vis&&pd(i))//如果这个矩形没有被涂色 且可以涂
{
if(a[i].col==a[now].col&&pd(i))//当颜色一样时
{
a[i].vis=1;
add(i);
dfs(i,sum,cnt+1);//拿笔数不用加1 而已涂矩形要加1
a[i].vis=0;
del(i);
}
if(a[i].col!=a[now].col&&pd(i))//当颜色不一样时
{
a[i].vis=1;
add(i);
dfs(i,sum+1,cnt+1);//都要加1
a[i].vis=0;
del(i);
} }
}
}
int main()
{
cinn();
for(int i=1;i<=n;i++)
{
if(!a[i].x1&&!a[i].vis)//只要从最上面开始搜索
{
a[i].vis=1;
add(i);
dfs(i,1,1);//先取第一个
a[i].vis=0;
del(i);
}
}
cout<<ans;
}

【题解】洛谷P1283 平板涂色(搜索+暴力)的更多相关文章

  1. 洛谷P1283 平板涂色 &&一本通1445:平板涂色

    题目描述 CE数码公司开发了一种名为自动涂色机(APM)的产品.它能用预定的颜色给一块由不同尺寸且互不覆盖的矩形构成的平板涂色. 为了涂色,APM需要使用一组刷子.每个刷子涂一种不同的颜色C.APM拿 ...

  2. P1283 平板涂色

    P1283 平板涂色 dfs 记忆化搜索 将矩阵转化为图求解,然后我们发现这是个DAG,于是就可以愉快地跑搜索了. 进行dfs时,我们可以用类似拓扑排序的方法.每次将上面所有矩形都被刷过(入度in[ ...

  3. 【算法•日更•第三十期】区间动态规划:洛谷P4170 [CQOI2007]涂色题解

    废话不多说,直接上题:  P4170 [CQOI2007]涂色 题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符 ...

  4. 洛谷 P4170 [CQOI2007]涂色

    题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个 ...

  5. 洛谷P4170 [CQOI2007]涂色题解

    废话: 这个题我第一眼看就是贪心呐, 可能是我之前那做过一道类似的题这俩题都是关于染色的 现在由于我帅气无比的学长的指导, 我已经豁然开朗, 这题贪心不对啊, 当时感觉自己好厉害贪心都能想出来 差点就 ...

  6. 洛谷P4170 [CQOI2007]涂色(区间dp)

    题意 题目链接 Sol 震惊,某知名竞赛网站竟照搬省选原题! 裸的区间dp,\(f[l][r]\)表示干掉\([l, r]\)的最小花费,昨天写的时候比较困于是就把能想到的转移都写了.. // luo ...

  7. 题解 P1283 【平板涂色】

    P1283 平板涂色 数据范围也太小了qwq..适合本萌新暴搜 小小的剪枝: 1.用pre预处理出每块矩形上方的矩形,pre[i][0]记录数目(如果数据范围再开大一点,直接1~n枚举判断可能超时qw ...

  8. 题解 洛谷 P2010 【回文日期】

    By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节: ...

  9. 洛谷 P1162 填涂颜色题解

    题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...

随机推荐

  1. Spring Cloud实战之初级入门(六)— 服务网关zuul

    目录 1.环境介绍 2.api网关服务 2.1 创建工程 2.3 api网关中使用token机制 2.4 测试 2.5 小结 3.一点点重要的事情 1.环境介绍 好了,不知不觉中我们已经来到了最后一篇 ...

  2. js控制input text字符键入/字符长度限制/字母自动大写

    功能: 1.仅允许指定字符键入 2.限制长度 实现代码: <input type="text" style="width: 6em" name=" ...

  3. ES6的新知识点

    一.变量 原有变量: var的缺点: 1.可以重复声明 2.无法限制修改 3.没有块级作用域 新增变量: let :不能重复声明,变量-可以修改,块级作用域 const:不能重复声明,变量-不可以修改 ...

  4. 表单校验常用原生js库

    1.字符串去除左右空格继承形式// 除去左右空格String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, & ...

  5. 基础架构之Mongo

    项目需求中,有些需求的数据是不必长时间持久化或一些非结构化设计,这时可以考虑用Mongo作为存储,具体介绍介绍详见官方 https://www.mongodb.com,这篇文章主要介绍安装及启用身份认 ...

  6. visual studio 2013的C++开发环境不错--vs2013安装试用手记

    原文:http://blog.csdn.net/haoyujie/article/details/24370189 从visual studio 体系,最后一次对C++实现了大的改进,那还是vs 7. ...

  7. According to TLD, tag fmt:formatDate must be empty, but is not 问题的解决

    在执行jsp格式化后报错,检查下代码,发现变成如下的样式: <fmt:formatDate value="${cur.sa_date}" pattern="yyyy ...

  8. javascript面向对象的写法02

    面向对象特性的初步实现 1.封装 利用作用域封装变量 作用域的概念是一样的,for语句,if语句等这些作用域内定义的变量只能作用域内访问,函数内定义的变量只能函数内访问. function Class ...

  9. Linux ->> Chmod命令改变文件/文件夹属性

    简介 chmod命令用于改变linux系统文件或目录的访问权限,控制用户/用户组对文件或目录的访问权限. 用法: 两种用法:1)用字母r(读).w(写).x(执行)表示权限类型:2)用数字表示,4代表 ...

  10. mysql 免安装版安装(window7)

    初次使用mysql免安装版步骤: 1.设置环境变量,将mysql 加压文件路径添加到环境变量path中(作用是不用每次都切换路径) 控制面板>系统和安全>系统>高级系统设置 2.安装 ...