随笔分类 - 线性dp
摘要:题目链接:https://www.acwing.com/problem/content/275/ 思路:首先要知道一个性质 : 一定存在一组最优解b[i] 使得每个b[i]都在a[i] 中出现过 证明略 然后考虑dp[i][j] 代表前i个a[i] 一定匹配好 且b中最后一个数是b[j] 的最小值
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/274/ 思路: dp[i][j] 表示 已经走到 a[i] 且结尾为b[j] 的最大值 以a[i] 取和不取 为分界点 不取的话 就是 dp[i-1][j] 要取的话 只有当a[i]==b[j]的时候可以取 但
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/273/ 思路: 考虑按照1 2 3 递增来放数字, 每次如果要放一个数字,要保证左边一个位置一定要有 数字并且上面一个位置一定要有数字,否则后面的数字不管怎么放 都会不满足题意 dp[i][j][k][x][y
阅读全文
摘要:转换成 状态机的 线性dp来写 状态机转移 只会从i-1来 题目一 题目链接:http://noi.openjudge.cn/ch0206/8462/ 同样可以根据 当前有抢劫/无抢劫 画出状态机图 抢 -> 没抢 没抢->没抢 没抢->抢 画出这个环形图即可 不要忘记边权 1 #include<b
阅读全文
摘要:题目链接:https://codeforces.ml/gym/308590/submit 题意:给定字符串A 和字符串B 问B在A中子序列的出现次数 思路: 计数dp dp[i][j] 代表A串前i个中 出现B串的前j个数 每次dp[i][j]=dp[i-1][j]继承过来 当a[i]==b[j]的
阅读全文
摘要:题目链接:https://codeforces.ml/contest/1032/problem/C 题意:给定一个数组 要求 当a[i]<a[i-1]时 你构造的第i个数 也要b[i]<b[i-1] 当a[i]>a[i-1]时 要b[i]>b[i-1] 当a[i]==a[i-1]时 要b[i]!=b
阅读全文
摘要:题目链接:https://codeforces.ml/problemset/problem/1446/B 题意:给定2个字符串a,b 求其中的任意子串的贡献值最大 贡献值为4*LCS(a,b )-|a|-|b| 思路:考虑到要n^2 处理 并且还要考虑子串的问题 所以想到dp 定义的状态为dp[i]
阅读全文
摘要:此处总结的是 矩阵类地图和LIS LCS问题 何时能用: dp一定是最优解 因为dp是得到了所有的情况 只不过取了最优的答案,所以三种属性一定满足,即 数量/max/min 也可以用来判断是否存在的合法性 见题目3 即dp[i][j]=1 即代表这个状态的合法 注意dp得到了模型之后,下次再见到类似
阅读全文
posted @ 2020-11-16 16:06
canwinfor
摘要:题目链接:https://codeforces.ml/contest/1096/problem/D题意:给一段字符串 删除每个字符的值为a[i] 问如何删除 使得剩下的字符串 中的子序列(不一定连续)不含hard 求最小值 思路:并不能如何确定最优 所以考虑dp来做 dp[i][j] 为前i个字符
阅读全文
摘要:题目链接:https://codeforces.ml/contest/1427/problem/C题意:给定一个矩形,n个人会出现在某个时刻 刚开始在1,1 问能碰到的最多的人是多少 每个出现的人的时间是单调递增的思路:因为没法直接考虑怎么找才能找最多的人 所以考虑dp 来得到所有状态 dp[i]
阅读全文
摘要:题目链接:https://codeforces.ml/contest/1221/problem/D题意:求满足所有a[i]!=a[i-1]的最小花费 每个数可以+1 花费b[i]思路:考虑每个数加或者不加的时候发现 没有办法用贪心来确定哪个数怎么加才是最优那么只能考虑用dp来写,用dp来写的话每个数
阅读全文
摘要:题目链接:https://codeforces.ml/problemset/problem/1437/C题意:给定n道菜 每个时间只能拿出一道菜, 每道菜的不愉快值= 拿出的时间和a[i]的差值 求总的不愉快值最小值为多少思路:发现直接匹配最小的差值不行 排序后直接匹配找最小的差值也不行 那么只能考
阅读全文
摘要:题目链接:https://codeforces.ml/contest/1433/problem/F 题意:给定一个矩阵,每一行最多取不超过m/2个数 问怎么取才能是 总和最大且%k==0思路: 每个数取和不取 01背包问题 范围不大 用四维dp即可 也可以优化成三维 dp[i][j][x][y] 代
阅读全文
摘要:题目链接:https://codeforces.ml/contest/1398/problem/D 题意:给3种集合 每种集合有 n对棍子 每次取任意两个集合的一对棍子构成矩形, 矩形的面积为贡献值, 问如何使得贡献值最大 思路: 不能确定的贪心 并且看到数据范围是允许dp 的 但是 直接dp选和不
阅读全文
摘要:题目链接:https://ac.nowcoder.com/acm/problem/205087 思路: 刚开始考虑的是贪心,让sum=0 遇到1就++ 0则-- 找到sum最大的时候,在这个时候反转一次, 这样是会漏情况的 如 0 0 0 0 0 1 1 1 可以把0变为1 再全部变为0 那么只能考
阅读全文
摘要:题目链接:https://ac.nowcoder.com/acm/problem/206673 思路:每个数都可以拿或者不拿 考虑数据范围 并且求的是最大值 那么很明显就类似一个01背包问题了 问题在于状态转移方程 令dp[i][j] 为前i个数mod为j的最大值 那么当前的状态就可以从前一个状态转
阅读全文

浙公网安备 33010602011771号