博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
状态压缩题目小结
阅读量:4349 次
发布时间:2019-06-07

本文共 1820 字,大约阅读时间需要 6 分钟。

由于这是对题目的小结,所以写的时候比較任意(由于之前已经写过对应的博客了)

假设须要具体的解题报告,我的博客都有。当然每道题的后面也有对应题目的解析链接。
假设兴许还有的话,会补上的

1.

题目大意:有一个n*m的草地(草地上有的是沼泽)。如今要分配牛去上面吃草。要求每头牛不能相邻(不能有公共边),问有多少种分配方案,一头牛都不分配也算一种分配方案

解题思路:这是碰到的第一道比較另类的压缩

1.首先考虑一下,每一行该怎么分配牛才不会让他们相邻,能够用状态压缩。0表示不放牛。1表示放牛。枚举一下有多少种可行的方案并纪录下来

2.接着考虑一下,由于不能相邻,而相邻的行之间又会相互影响。

考虑到第一行是比較特殊的。能够先枚举第一行的解决方式,接下来再枚举其它行。

在枚举其它行的情况时,要考虑和上一行的方案是否能共存,再考虑一下该方案是否可行(有沼泽影响)
如何推断该方案是否可行,能够先预处理一下地图,将地图也压缩成一个二进制数。0表示草地,1表示沼泽。然后将要枚举的方案和该行状态进行与运算。假设相与结果不为0,表示有牛放在了沼泽地,那么方案就不可行了
推断和上一行是否能共存的推断和上面推断几乎相同。用该行的方案和上一行方案进行与运算。假设结果不为0,表示有两头牛放在了同一列,那么方案不可行

2.

这题和上题几乎相同。仅仅只是是多了一个推断

3.

题目大意:有一个人要送披萨到N个地方,同一个地方能够去多次,问送全然部披赛再回到店里走的最短路径是多少

解题思路:能够将全部的地方压缩成一个状态。0表示还没有经过,1表示已经经过了,然后再bfs就能够求得结果了

4.

题目大意:有n个原子,两个原子相互碰撞的话,就会产生能量,而且还有一个原子会消失,问n个原子能产生的最大能量是多少

解题思路:注意这题,能量有可能是负的,所以不须要每一个原子都用掉。

用0表示没用。1表示用了,进行压缩

5.

题目大意:有一个人想要去旅游,可是他同一个地方不想逛超过两次。问如何逛才干使得花费达到最小

解题思路:这题和第3题几乎相同,仅仅只是这题要用3进制数表示去过的城市的次数

6.

题目大意:有个人想去超市买商品。恰巧碰上超市优惠。问如何买商品才干使所花费用达到最低

解题思路:能够将每件商品也当作一种打折方式。然后进行bfs

这题最多仅仅有5件商品,且商品数量最多也仅仅有五件。所以能够用五维的数组表示状态

7.

题目大意:有一人要在N*M的地板上面铺满1 * 2或者2 *1的砖。问铺满的方法有几种

解题思路:铺砖问题,能够暴力枚举每行和上一行的状态进行求解

8.

题目大意:有一个人要用1*2的和2*2的砖铺满N*M的格子,问有多少种铺砖方式

解题思路:和上面那一题的思路是几乎相同的,直接暴力枚举

9.

题目大意:有一块蛋糕,蛋糕上面放着蜡烛,如今要求你在上面铺上1*2的巧克力,使得蛋糕上面没铺的面积为1的数量达到最大,问最少要铺放多少个巧克力

解题思路:由于有空格的缘故。所以难度更加大了

假设和上面那题一样,仅仅考虑当前行和上一行的话,就非常难推断当前的空格是否可行了,所以我们变成考虑三行
设dp[i][s1][s2]为第i行的状态为s1,第i+1行的状态为s2,须要铺多少巧克力
要推断空格是否能成立。就须要三行来推断,假设i-1,i,i+1为前中后。那如今枚举中和后两行,这样就能够推断巧克力的摆放是否成立了(由于有前行能够推断中行的空格是否可行)
那么该怎么枚举
首先先枚举第i行的状态,接着再枚举第i+1行铺巧克力对第i行的影响。这样第i行的状态就变了,这样就得到状态转移方程了
dp[i][s1][s2] = min(dp[i][s1][s2], dp[i-1][s3][s4] + cnt)
cnt表示将第i+1行铺成s2的状态。将第i行从状态s4变成s1须要的巧克力数量

10.

题目大意:要在一张矩形内将全部小矩形块涂成对应的颜色,问最少须要换多少次画笔(一个矩形能被涂色仅仅有当它上面的全部矩形都被涂色时才可被涂)

解题思路:预处理一下每一个矩形能被涂色的前置条件

然后设dp[color][state]为涂到的当前颜色是color,被涂的小矩形状态为state。须要使用多少次画笔
接着就能够暴力BFS了

转载于:https://www.cnblogs.com/lytwajue/p/7142391.html

你可能感兴趣的文章
APP开发手记01(app与web的困惑)
查看>>
初识前端作业1
查看>>
ffmpeg格式转换命令
查看>>
thymeleaf 自定义标签
查看>>
关于WordCount的作业
查看>>
UIView的layoutSubviews,initWithFrame,initWithCoder方法
查看>>
STM32+IAP方案 实现网络升级应用固件
查看>>
用74HC165读8个按键状态
查看>>
jpg转bmp(使用libjpeg)
查看>>
linear-gradient常用实现效果
查看>>
sql语言的一大类 DML 数据的操纵语言
查看>>
VMware黑屏解决方法
查看>>
JAVA 基础 / 第八课:面向对象 / JAVA类的方法与实例方法
查看>>
Thrift源码分析(二)-- 协议和编解码
查看>>
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>