题目链接: 题意:给一个长度为n和m,k的数组,的最大值。 题解:考虑dp的做法,dp[i][j]代表以第i个数为右端点,长度减一求余m的值为j时的最大值。 转移方程:dp[i][j]=dp[i-1][j-1]+a[i](j>0) dp[i][j]=max(dp ...
题目链接:传送门 思路: 由于只能翻转一次子串,就相当于找出两个不连续的子串,把在后面的一个子串翻转过来,和第一个子串拼接。 因为题目仅要求子串中的字符不重复,所以字符的先后顺序无关,翻转的操作就相当于: 选出两个不连续的子串,且他们没有相同的字符,两个子串的长度之和就是答案的一种可能。 题目中反复强调,给出的字符串只有前 个字母 a, t ,考虑到 , ,显然在疯狂暗示:要用状压来做这题。 所以 ...
2019-10-03 16:44 2 340 推荐指数:
题目链接: 题意:给一个长度为n和m,k的数组,的最大值。 题解:考虑dp的做法,dp[i][j]代表以第i个数为右端点,长度减一求余m的值为j时的最大值。 转移方程:dp[i][j]=dp[i-1][j-1]+a[i](j>0) dp[i][j]=max(dp ...
(先处理好基本的位运算的东西) 为了更好的理解状压dp,首先介绍位运算相关的知识。 1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。例如3(11)&2(10)=2(10)。 2.’|’符号,x|y,会将两个十进制数在二进制下进行 ...
状压dp的含义 在我们解决动态规划题目的时候,dp数组最重要的一维就是保存状态信息,但是有些题目它的具有dp的特性,并且状态较多,如果直接保存的可能需要三维甚至多维数组,这样在题目允许的内存下势必是开不下的,那么我们能不能想个办法,把它压缩成一维呢?对,二进制.一般的动规题目数据范围都不会 ...
E. Yet Another Division Into Teams There are n students at your university. The programming skill of the i-th student is ai. As a coach, you want ...
题目链接:传送门 思路: 题目中的m为20,而不是26,显然在疯狂暗示要用状压来做。 考虑状压字母集合。如果想要保存字母集合中的各字母的顺序,那就和经典的n!的状态的状压没什么区别了,时间复杂度为O(m22m),是不可行的,所以本题肯定有更好的做法。 考虑不保存字母集合中各字母 ...
2018过农历新年这几天,学了一下状态压缩动态规划,现在先总结一下。 状态压缩其实是一种并没有改变dp本质的优化方法,阶段还是要照分,状态还是老样子,决策依旧要做,转移方程还是得列,最优还是最优,无后还是无后,所以它比较好理解。 状压,顾名思义就是要将一些状压想办法压缩起来(可以压 ...
一、关于状压 dp 为了规避不确定性,我们将需要枚举的东西放入状态。当不确定性太多的时候,我们就需要将它们压进较少的维数内。 常见的状态: 天生二进制(开关、选与不选、是否出现……) 爆搜出状态,给它们编号 1. 状态跟某一个信息集合内的每一条都有关。(如 dp 套 dp ...
说到状压dp,一般和二进制少不了关系(还常和博弈论结合起来考,这个坑我挖了还没填qwq),二进制是个好东西啊,所以二进制的各种运算是前置知识,不了解的话走下面链接进百度百科 https://baike.baidu.com/item/%E9%80%BB%E8%BE%91%E8%BF%90%E7 ...