状压dp
johsnows
正在静下心来学算法的acmer
展开
-
hdu 1074 Doing Homework (状压dp)
题意:小明有n个作业,没个作业有ddl,有完成需要的时间t,一个作业如果超过ddl一个时间,就扣去一分,问最后做完所有作业扣去的分数最少是多少,并输出做作业的顺序。解题思路:基础dp题,以为应该很easy,xjb贪了3发,发现不对。其实很容易想到作业,只不过觉得有点麻烦。但是想到去写状压了,也就简单了。用一个1dp[i][j],i表示第几天,j就是上面的二进制数原创 2017-07-11 17:34:09 · 292 阅读 · 0 评论 -
codeforces 449 D Jzzhu and Numbers(容斥+dp)
这题真的爆炸难懂...待补。代码:#include using namespace std;const int mod=1e9+7;const int maxn=1e6+5;int dp[maxn];long long p[maxn];int main(){ int n, i, j, x; cin>>n; for(i=1, p[0]=1; i<原创 2017-08-23 20:29:12 · 325 阅读 · 0 评论 -
hdu 5450 Traversal(状压dp)
题意比较迷,第一句话的意思是那k个数不存在不用管,出题人的英语.....但是这个题还是比较难的。每个点只能到差值1, p, p+2的点,要求每次走数量大于等于3的环,不能重复走完所有点。走完所有点形成环其实相当于,每个点出度入度两次,要超过3个点意味着不能两两成环,更不能自环。由于最多只能到达p+2之外的点,所以每个点一定要在p+2的距离只能形成一个环。可以维护原创 2017-08-23 21:24:21 · 444 阅读 · 0 评论 -
atcoder Yet Another Palindrome Partitioning(dp)
题意:给出一个字符串,最少需要多少次拆分得到的子串都是合法的,合法的定义是改变字符串顺序能得到一个回文串。解题思路:容易想到的是一个合法的字符串的26个字母最多只能一个字母出现次数为奇数,用26位二进制数(mask)表示,1表示奇数的话,只有能整除2的和0是合法的。dp想法是每个状态减去一个合法串然后转移过来,但是显然不能for一下,这时候就利用下上面的mask。用ma原创 2017-10-23 19:21:10 · 413 阅读 · 0 评论