【POJ1691】【P1283】平板涂色
时间:2019-08-19
本文章向大家介绍【POJ1691】【P1283】平板涂色,主要包括【POJ1691】【P1283】平板涂色使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接(洛谷的):https://www.luogu.org/problem/P1283
写这道水题(?)题解的原因有两个:一是因为它花了我几天的空闲时间来解,二是为了提醒自己今后做题一定要先看数据范围。
做这题的时候情绪是这样变化的:
(初见)啊应该是状压没错了吧,数据范围也正好。。
(思索半天后)状压好难写。。改搜索吧。
(第二天)让我重新捋捋昨天我写的这些事什么东西(忘了自己设的变量的含义)
(第三天)想一想怎么剪枝?可以最优性剪枝,可以按颜色种类分类,排序来优化搜索顺序,可以预设一个数组来存当前深度到了哪里。。但是改动的工作量好大啊。
(第四天)盯着颜色号为1到20的整数。平板的左上角坐标总是(0, 0)。坐标的范围是0..99。N小于16(1000ms)思考了半天然后想到——
啊。是不是只要暴力就OK了?
真的诶。。
整洁:枚举每步可能选取的所有block进行dfs。这里的“可能”判断条件:枚举所有已选block,看能不能覆盖当前选中的block的上面。
上代:
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; int n; int ans=1e9; bool pinked[20]; struct block{ int u;//upside int d;//down int l;//left int r;//right int c;//color }a[20]; bool check(int j){ for(int i=1;i<=n;i++) { if(!pinked[i]&&a[i].d==a[j].u&&((a[i].r>a[j].l&&a[i].l<=a[j].l)||(a[i].l<a[j].r&&a[i].r>=a[j].r)))return false;//在它上面挡着却没被选的 } return true; } void solve(int cost,int done,int co){ if(cost>ans)return; if(done==n){ ans=cost; return; } for(int i=1; i<=n; i++) { if( !pinked[i]&&check(i) ) { pinked[i]=1; if(a[i].c==co)solve(cost,done+1,co); else solve(cost+1,done+1,a[i].c); pinked[i]=0; } } } int main(){ cin>>n; for(int i=1; i<=n; i++) scanf("%d%d%d%d%d",&a[i].u,&a[i].l,&a[i].d,&a[i].r,&a[i].c); for(int i=1; i<=n; i++) { if(a[i].u==0) { pinked[i]=1; solve(1,1,a[i].c); pinked[i]=0; } } cout<<ans; }
历史(错误)版本就不放了,就这个亚子⑧
原文地址:https://www.cnblogs.com/snowysniper/p/11379713.html
- 零基础学编程005:打印一行复利数据
- 使用Keras集成卷积神经网络的入门级教程
- 零基础学编程003:在游戏中学JAVA和C#
- 在机器学习中处理缺失数据的方法
- 零基础学编程002:Hello World
- php随机数怎么获取?一个简单的函数就能生成
- 零基础学编程009:只显示2位小数
- .Net实现Windows服务安装完成后自动启动的两种方法
- 【教程】OpenCV—Node.js教程系列:Node.js+OpenCV面部脸识别
- 学会10多种语言是种什么样的体验?
- Spring Data 最佳实践
- Prodigy,从根本上有效的自主学习驱动的注释工具
- 零基础学编程017:画出我的公众号LOGO
- 一个实用的却被忽略的命名空间:Microsoft.VisualBasic
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux之网络
- linux vim编辑器之常用指令
- saltstack手册(含官方pdf)
- 详解Go变量类型的内存布局
- linux vim 编辑器之多文件多窗口编辑
- 深入解析 Go 中 Slice 底层实现
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)
- linux文件时间属性 查看和修改文件时间
- Linux硬连接和软连接详解
- Linux 压缩,解压缩,打包指令
- Linux下使用python脚本执行BCP导入导出操作
- 通用高效字符串匹配--Sunday算法
- Golang fmt Printf 格式化参数手册/详解/说明
- 正则表达式(RegEx)官方手册/权威指南【Python】
- 玩透二叉树(Binary-Tree)及前序(先序)、中序、后序【递归和非递归】遍历