随笔分类 -  ACM-动态规划-状压dp

摘要:题意: 买零食凑卡片的游戏,浪费钱。 给出每包粮食含有某一张卡片的概率,当然也可能什么也没有。 问凑齐一套卡片的买的零食的数量的期望。 思路: 求期望,那么倒着dp。 因为n只有20,所以考虑用状态压缩来表示当前拥有的卡片的情况。 dp[sta]表示当前拥有卡片为sta时还需要买多少包零食,显然dp 阅读全文
posted @ 2018-05-09 11:51 qrfkickit 阅读(222) 评论(0) 推荐(0)
摘要:题意: 给出n和k,求出长度为n的不包含长度大于等于k的回文串的01字符串的个数。 思路: 如果一个字符串包含长度为k的回文串,那么它肯定包含长度为k-1的回文串,所以考虑第i位的时候,只要前缀中不包含长度为k的回文串,就只需要考虑这一位使其满足条件,所以就可以进行递推dp了。 设dp[i][j]为 阅读全文
posted @ 2018-05-04 00:43 qrfkickit 阅读(398) 评论(0) 推荐(0)
摘要:题意: n个城市,m条双向路径。 从a城市到b城市,有两种付费方法: 1.在c城市预先付费,前提是已经到达了c城市; 2.到了b城市之后,在b付费。 给出路径以及付费信息,求出从1到n的最少花费,或判断从1无法到达n。 思路: 状态压缩dp,每次更新的时候,更新两次,第一次更新未到达的城市,第二次更 阅读全文
posted @ 2018-04-17 14:45 qrfkickit 阅读(242) 评论(0) 推荐(0)
摘要:题意: 定义一个最优哈密顿回路如果把如下描述的值最大化: 有n个城市。一个哈密顿回路C1C2..Cn的值由3个部分组成: 1.这个路径上每个岛的值Vi之和; 2.这个路径上每条边Vi*Vi+1之和; 3.如果路径上连续的三个岛屿CiCi+1Ci+2之间两两互相连通,那么就加上Vi*Vi+1*Vi+2 阅读全文
posted @ 2018-04-17 00:48 qrfkickit 阅读(161) 评论(0) 推荐(0)
摘要:题意: 有n个城市,一个人选择一个城市开始,游历其它城市,但是他不能到一个城市超过两次。 问是否能游历完这些城市,以及最少的花费。 思路: 一直读错题意,觉得是二进制状压,囧。 不超过两次,那么就是3进制状态压缩,预先把3的进制预处理出来,之后按照二进制同样的处理方法就行了。 还要先把某个数的3进制 阅读全文
posted @ 2018-04-17 00:25 qrfkickit 阅读(187) 评论(0) 推荐(0)
摘要:题意: 一个人要送pizza到一些地方,一个地方可以进过两次,这样经过中转的时间可能会更短。 问送完pizza会到原点的最少时间。 思路: 状压dp + Floyd? 经典的tsp问题,不过并没有想到用Floyd求最短距离。 我的做法是,更新一个状态时,更新两次,第一次更新最新的点,第二次更新经过中 阅读全文
posted @ 2018-04-17 00:15 qrfkickit 阅读(141) 评论(0) 推荐(0)
摘要:题意: 中文题意,略。 思路: 一支炮兵部队可以攻击的范围是两格,所以当前行的状态只和前两行的状态有关。 所以就枚举当前行,前一行和前两行的状态,如果用二进制枚举,2^M的三次方,M最大为10,铁定TLE。 其实状态并没有想的那么多,因为隔两格才可以放一个,所以其实真的有效的状态不会超过100个。 阅读全文
posted @ 2018-04-16 23:47 qrfkickit 阅读(148) 评论(0) 推荐(0)
摘要:题意: 给出若干种货物及其数量以及价格,然后给出一些优惠信息,一些货物组合在一起的价格一定比它们的原价加起来要低。 现在买到这些货物最少的钱(不能增加货物,即使钱会更少)。 思路: 最多有5种货物,每种货物最多5个。 那么就可以考虑压缩状态,6进制的状态压缩,这样就可以表示每种货物的状态。 然后,对 阅读全文
posted @ 2018-04-14 20:10 qrfkickit 阅读(418) 评论(0) 推荐(0)
摘要:题意: n个有能量的原子,每两个原子相碰可以产生能量,之后其中的一个原子会消失。 给出两两相撞的能量表,问只剩一个原子的时候产生的最大的能量是多少。 思路: 由于n的值最大为10,所以考虑压缩状态,就可以进行dp了。 转移方程:dp[i|(1<<k)] = max(dp[i|(1<<k)],dp[i 阅读全文
posted @ 2018-04-14 19:57 qrfkickit 阅读(196) 评论(0) 推荐(0)
摘要:题意: 约翰有一个N*M的农场,他想在里面种小麦。 有些格子是不育的,并且两株小麦不能相邻(上下或左右)。 问种植的方案有多少种,一个也不种植也是一种方案。 思路: 非常裸的一道状压dp,但是复杂度把人吓住了。首先枚举当前状态cur,再枚举之前的状态pre,对于每一行都这样做。那么复杂度就是O(n  阅读全文
posted @ 2018-04-12 15:28 qrfkickit 阅读(149) 评论(0) 推荐(0)
摘要:https://vjudge.net/problem/CodeForces-8C 题意: 一个平面上放着许多东西,每个东西都有一个坐标,最开始一个人在一个起始坐标,她出发去拿东西,一次要么拿一件东西,要么拿两件东西,拿了之后必须返回起始坐标。 每次花费的时间是两个坐标距离的平方,问拿完所有的东西需要 阅读全文
posted @ 2017-10-07 23:39 qrfkickit 阅读(472) 评论(0) 推荐(0)