摘要: 题目传送门 解题思路: 就是完全背包和多重背包的混合.处理时间的时候注意一下就行了 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 string l,l1; 7 int h1,h2,m1,m2,t, 阅读全文
posted @ 2020-02-16 23:56 Mr^Simon 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 其实本题可以看作在一个01背包里,所有物品可以组成价值的所有可能,找出那些某些物品价值和恰好等于背包中某一个物品的价值的所有方案数,所以跑01背包. AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<algori 阅读全文
posted @ 2020-02-16 23:54 Mr^Simon 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 先是朴素做法,f[i][j]表示字符串A前i位和字符串B前j位的最长公共子序列, 当a[i] == b[j]时,f[i][j]=f[i-1][j-1] + 1; 如果不相等,f[i][j]=max(f[i-1[j],f[i][j-1); 时间复杂度是O(nm)的,近似O(n^ 阅读全文
posted @ 2020-02-16 23:45 Mr^Simon 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 本题朴素求最长公共子序列即可,但是空间不够,怎么办呢? 空间不够,滚动数组来救 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 string l,l1; 7 int f[2] 阅读全文
posted @ 2020-02-16 23:35 Mr^Simon 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 就是求一个字符串的最长回文子序列的长度,然后用整个的长度减去最长回文子序列的长度 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 #include<algorithm> 5 6 using nam 阅读全文
posted @ 2020-02-16 23:33 Mr^Simon 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 解题思路: 第一问要求最长公共子序列,直接套模板就好了. 第二问要求数量,ans[i][j]表示第一个字符串前i个字符,第二个字符串前j个字符的最长公共子序列的数量 如果f[i][j]是由f[i-1][j]转移过来的,那么ans[i][j] += ans[i-1][j]. 如果是从f[i 阅读全文
posted @ 2020-02-16 23:21 Mr^Simon 阅读(142) 评论(0) 推荐(0) 编辑