随笔分类 -  ICPC-动态规划

摘要:题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大、但是 m 很小的时候 发现此题DP并不合适、于是想可能是某种组合数学的问题可以直接公式算 看到题解的我 阅读全文
posted @ 2018-10-16 11:38 qwerity 阅读(164) 评论(0) 推荐(0)
摘要:题目链接 题意 : 给出若干个物品的数量和单个的重量、问你能不能刚好组成总重 S 分析 : 由于物品过多、想到二进制优化 其实这篇博客就是存个二进制优化的写法 关于二进制优化的详情、百度一下有更多资料 #include<bits/stdc++.h> #define LL long long #def 阅读全文
posted @ 2018-09-19 19:54 qwerity 阅读(142) 评论(0) 推荐(0)
摘要:题目链接 题意 : OSU 是一款群众喜闻乐见的休闲软件。 我们可以把 OSU 的规则简化与改编成以下的样子 : 一共有 n 次操作,每次操作只有成功与失败之分,成功对应 1 ,失败对应 0 ,n次操作对应为 1 个长度为 n 的 01 串。在这个串中连续的 X 个 1 可以贡献 X^3 的分数,这 阅读全文
posted @ 2018-08-29 13:59 qwerity 阅读(144) 评论(0) 推荐(0)
摘要:题目链接 题意 : 中文题、点链接 分析 : 第一道有关概率期望的DP 有个大部分情况下通用的结论 概率正推、期望反推 原因不明、其实是没有查到较好的解释 这题由于有一些取物品的先决条件在这里 而且观察到题目 n 并不是很大 果断选择状压来解决 这题定义 dp[i][j] 到第 i 回合、拿过物品状 阅读全文
posted @ 2018-08-27 17:28 qwerity 阅读(166) 评论(0) 推荐(0)
摘要:题目链接 题意 : 给出 N 个数、然后问你最多取出多少石子使得在 NIM 博弈中、后手必胜 分析 : Nim 博弈模型,后手必胜当且仅当各个堆的石子的数目的异或和为 0 转化一下、变成最少取多少石子使得异或和为原来所有石子堆的异或和 和背包DP思想很类似、可以考虑 DP dp[i][j] = 到第 阅读全文
posted @ 2018-08-22 15:30 qwerity 阅读(213) 评论(0) 推荐(0)
摘要:题目链接 题意 : 给出长度为 n 的字符串、问你准确删除 m 个元素之后、能产生多少种不同的子串 分析 ( 参考博客 ): 可以考虑线性 DP 解决这个问题 试着如下定义动态规划数组 dp[i][j] = 在加入第 i 个字符串后、总共删除了 j 个字符后的不同子串的个数 不难写出状态转移方程 d 阅读全文
posted @ 2018-07-22 15:40 qwerity 阅读(162) 评论(0) 推荐(0)
摘要:关于数位DP的学习推荐 ==> Click here #define LL long long LL int a[32]; LL dp[32][state]; /*不同题目状态不同*/ LL dfs(int pos, int state /*state变量*/ ,bool lead /*前导零*/ 阅读全文
posted @ 2018-06-06 22:12 qwerity 阅读(169) 评论(0) 推荐(0)
摘要:题目链接 题意 : 中文题 分析 : 价值和重量都太过于大,所以采用折半枚举的方法,详细可以看挑战的超大背包问题 由于 n <= 30 那么可以不必直接记录状态来优化,面对每个用例 直接采用递归回溯的方法来写这个 DP 即可 #include<bits/stdc++.h> #define LL lo 阅读全文
posted @ 2018-05-21 22:27 qwerity 阅读(188) 评论(0) 推荐(0)
摘要:题目链接 题意 : 给出 N 堆石子,每次可以选择一堆石子拿走任意颗石子,最后没有石子拿的人为败者。现在后手 Bob 可以在游戏开始前拿掉不超过 d 堆的整堆石子,现在问你有几种取走的组合使得 Bob 能保证他在游戏开始后是必胜的。 分析 : 在没有附加规则,即 Bob 可以先取走某些堆的情况下 就 阅读全文
posted @ 2018-05-21 22:03 qwerity 阅读(223) 评论(0) 推荐(0)
摘要:题意 : 题目链接 分析 : 一开始这个想法也有想到,但是貌似要开很大数组,就感觉应该不行 遂放弃想其他方法,万万没想到注意到可以滚动优化(其实不优化也可以过) 定义 dp[i][j] 表示 到第 i 个数为止,凑成 j 分数所要转的最小次数 转移方程如下 若选择旋转 i 这个多米诺 dp[i][j 阅读全文
posted @ 2018-04-23 17:50 qwerity 阅读(157) 评论(0) 推荐(0)
摘要:题意 : 题目链接 分析 : 可以观察到给出的配对代价表中对角线部分是正数 其余的都是负数,也就是说让相同字母的匹配的越多越好 即找出 LCS 但是这里 DP 的过程需要记录一下代价 有关 LCS 的一篇博客 ==> Click here 如果不是计算长度而是计算配对的价值,那么初始化的时候 记得将 阅读全文
posted @ 2018-04-22 22:23 qwerity 阅读(139) 评论(0) 推荐(0)
摘要:题意 : 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个 阅读全文
posted @ 2018-04-22 14:59 qwerity 阅读(145) 评论(0) 推荐(0)
摘要:题意 : 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分。 分析 : 有大佬给出了四边形不等式优化........ 发现并不会,于是开始 阅读全文
posted @ 2018-04-22 13:39 qwerity 阅读(181) 评论(0) 推荐(0)
摘要:题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数 分析 : 这题和 LIS 很相似,不同的是加多了一个需要边和边相连这一条件 考虑使用树状数组求 LIS 的方法来考虑这题 如果你还不知道 LI 阅读全文
posted @ 2018-04-10 15:33 qwerity 阅读(170) 评论(0) 推荐(0)
摘要:题目链接 分析 : 就是一个 0/1 背包,但是需要记录具体状态的转移情况 这个可以想象成一个状态转移图,然后实际就是记录路径 将状态看成点然后转移看成边,最后输出字典序最小的路径 这里有一个很巧妙的做法 先将所有的硬币升序排序(这一点很重要) 然后在这一条件下,假设当前状态是考虑第 i 个硬币,前 阅读全文
posted @ 2018-03-20 19:49 qwerity 阅读(241) 评论(0) 推荐(0)
摘要:题意 : 题目链接 分析 : 如果没有 BUG (即 h == 0 的时候)就是一个普通的 0 / 1 背包 需要讨论一下 h != 0 的情况 此时有就相当于有物品是有特权的 而且背包装有特权的物品根据题目的要求是应当最后装的 也就是说特权物品装完之后背包将不再可装 所以特权物品肯定是只有一个的 阅读全文
posted @ 2018-03-09 22:02 qwerity 阅读(244) 评论(0) 推荐(0)
摘要:题意 : 给出含有 N 个点 M 条边的图(可能不连通或者包含环),每个点都标有一个小写字母编号,然后问你有没有一条路径使得路径上重复字母个数最多的次数是多少次,例如图上有条路径的顶点标号顺序是 abcaca 那么答案就是 3 ,因为 a 出现了三次,如果答案无穷大则输出 -1 分析 : 不难联想到 阅读全文
posted @ 2018-02-08 17:35 qwerity 阅读(166) 评论(0) 推荐(0)
摘要:题意 : 给定一个区间长度 n ,接下来给出 m 个子区间,要求最少选出多少个区间才能使得 1~n 这个区间被所选的所有子区间覆盖 分析 : 暴力枚举所有可能的组合可以达到 O( m^m ) ,完全不行 这里考虑动态规划解法 定义 dp[i][j] : 到第 i 个为止,完全覆盖点(即从 1~这个点 阅读全文
posted @ 2018-01-22 22:35 qwerity 阅读(183) 评论(0) 推荐(0)
摘要:题意 : 以下两个问题的物品都只能取有且只有一次 ① 给你 N 个物品,所有物品的价值总和不会超过 5000, 单个物品的价格就可达 10^10 ,背包容量为 B ② 给你 N (N ≤ 40 ) 个物品,物品的单个价值和重量都达到 10^15 问你在背包容量为 W 给出 ① 和 ② 问题条件下背包 阅读全文
posted @ 2018-01-20 10:50 qwerity 阅读(1930) 评论(0) 推荐(0)
摘要:题意 : 给出 6 枚硬币的面值,然后要求求出对于 1~100 要用所给硬币凑出这 100 个面值且要求所用的硬币数都是最少的,问你最后使用硬币的平均个数以及对于单个面值所用硬币的最大数。 分析 : 问题建模就是属于完全背包了,但是和普通的完全背包不一样,这题可以使用硬币的负数值,其实面对负数面值的 阅读全文
posted @ 2018-01-18 11:27 qwerity 阅读(220) 评论(0) 推荐(0)