http://poj.org/problem?id=3254 从这里学的 http://blog.csdn.net/accry/article/details/6607703 状压dp的入门题.一片N×M的田地,有的地方可以种玉米,有的地方不可以.种玉米的区块不能相邻.种玉米的求总方案数,不种玉米也是一种方案. 每一行总共2^N种状态,其中删去有相邻的状态,删除不符合给定条件的状态.保留下最终的所有状态.然后开始dp. 从上往下,每一行之依赖于上一行.所以从上一行转移过去,把状态数加起来就行了.…
http://acm.hdu.edu.cn/showproblem.php?pid=3853 膜猴烧酒madoka 讲定义为dp[i][j] 位置为ij的魔法值期望,可以发现dp[i][j] = dp[i][j]*p1[i][j]+dp[i][j+1]*p2[i][j]+dp[i+1][j]*p3[i][j]+2 最后可以表示为 dp[x][y] = -p[x][y][])*(p[x][y][]*dp[x][y+]+p[x][y][]*dp[x+][y]+2.0); 递推的时候从右下角开始,向左…
http://poj.org/problem?id=2096 有n种分类,s种子系统,相互独立.每天发现一个bug等概率的属于n种分类和s种子系统. 要使发现的bug完全覆盖n种分类,s种分类,求天数的期望值. 用dp[n][s]表示已发现n种分类s种子系统需要的天数期望,则 dp[n][s]可以转化成dp[n][s] dp[n+1][s] dp[n][s+1] dp[n+1][s+1]. 只要表示出每一种情况的概率就可以了. #include <cstdio> #include <cs…
http://codeforces.com/problemset/problem/414/B 定义一个串为好的串当这个串符合 di|di+1,1<i<k-1 给定一个n为串中元素的取值范围,一个k为串的长度,计算串的所有可能的计数. 我一开始想到了用dp[i][j] i表示串的长度,j表示长度为i结尾为j的串的数目. 但是怎么递推我想歪了.我想的是从i-1推出所有的i,这样每次递推都有n^2的复杂度. 看了题解才明白是每次用i把i+1推出来. #include <cstdio> #…
http://poj.org/problem?id=1276 简单的多重背包,不过需要优化一下才能过.网上还有暴力的做法. 二进制优化在背包九讲里讲的比较清楚.对于多重背包的每一件物品,使用二进制的形式表示. 比如5件A价值物品,可以表示成1件1*A价值物品+1件2*A价值物品+1件2*A价值物品. 这三种物品就能表示选取原5种A物品所有的情况.从m变成了logm. 最后利用01背包来解决. #include <cstdio> #include <cstring> #include…
题目链接 题意: 给n长度的S串,对于0<=i<=|S|,有多少个长度为m的T串,使得LCS(S,T) = i. 思路: 理解的不是很透彻,先占个坑. #include <bits/stdc++.h> const int S = (1 << 15) + 5; const int MOD = 1e9 + 7; char color[] = "ATGC"; char s[20]; int pre[20], lcs[20]; int dp[2][S], a…
Another OCD Patient Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 716    Accepted Submission(s): 270 Problem Description Xiaoji is an OCD (obsessive-compulsive disorder) patient. This morni…
这是我第一次写$dp \; of \; dp$,大致思路参考了xyx的做法,可能有些地方不太一样,但也许会详细一点. 考虑给你一副牌,如何判断这副牌是否是胡的. 容易发现相同的顺子不会选三个以上,于是考虑花色从小到大进行$dp$.令$dp_{0/1, i, j, k}$表示是否有对子,考虑了前$i$种花色的牌,以花色$i - 1$的牌为开头的顺子准备选$j$个,以花色$i$的牌为开头的顺子准备选$k$个,此时能选的最大的面子数.转移只要枚举以花色$i + 1$的牌开头的顺子准备选几个,剩下的牌组…
dp套dp 每个木板是个递推的dp,外部是个分组背包 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) using namespace std; ; ; inline int read(){ ,f=;char ch=getchar(); ;ch=getchar();} )+(x<<)+(ch^);ch=getchar();} return x*f;} int n,m,t,f[N]…
正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞下博客没事儿复习下不然做过的题目还花俩小时我真的哭死…… 先放上错误的90分代码讲一下错哪儿了(因为……其实100并不难是可以想到的……没有太大讲的意义,主要我太菜了所以才会搞这么久TT 点我♂看♂沙雕灵巧在线WA题 然后错误的点是最后一个点RE,开大点儿就MLE. 来考你一下,这个程序错哪儿了?…