上一页 1 2 3 4 5 6 7 ··· 12 下一页

2013年8月19日

beautiful number 数位DP codeforces 55D

摘要: 题目链接:http://codeforces.com/problemset/problem/55/D数位DP题目描述:一个数能被它每位上的数字整除(0除外),那么它就是beautiful number。问区间[a,b]上有多少个beautiful number。如102就是一个beautiful number,因为它能整除1,2。14不是,因为14不能整除4.解法:数位DP,设dp[i][j][k]为累计到第i为,公倍数为j,模lcm(1,2,```,9)=2520的余数为k的数的个数。注意到两个事实,要求某个数能整除它的每一个非0位上的数字,那么等价于将这些数字求一个最小公倍数,如果这个数能 阅读全文

posted @ 2013-08-19 16:34 allh123 阅读(197) 评论(0) 推荐(0) 编辑

2013年8月18日

最长上升子序列

摘要: 关于最长上升子序列的链接:http://wenku.baidu.com/view/fe0deecea1c7aa00b52acb71.htmlhttp://blog.sina.com.cn/s/blog_4b1e4fe9010098af.htmlhttp://www.cnblogs.com/celia01/archive/2012/07/27/2611043.html裸的最长上升子序列:时间复杂度为O(n*n)POJ 2533贴代码: 1 #include 2 #define N 1005 3 int a[N]; 4 int lis(int n) 5 { 6 int *dp= new i... 阅读全文

posted @ 2013-08-18 21:53 allh123 阅读(226) 评论(0) 推荐(0) 编辑

0-1背包 codeforces 55 D

摘要: 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=29608#problem/D我把它化成了0-1背包,应该可以直接用多重背包做的,但是没有写好,所以一直算不对贴代码: 1 #include 2 #include 3 #define INF 0x3f3f3f3f 4 #define N 1005 5 int f[N],s[N]; 6 struct bake 7 { 8 int val,we; 9 } p[12*N];10 int main()11 {12 // freopen("in.c","r& 阅读全文

posted @ 2013-08-18 21:04 allh123 阅读(120) 评论(0) 推荐(0) 编辑

2013年8月17日

概率DP HDU 4586 play the dice

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4586解题思路:只考虑第一次,获得的金币的平均值为sum/n.sum为所有色子的面的金币值相加。对于运气好,摇中了可以再来一次,该轮就能获得m/n*(sum/n)运气好,又再来一次,该轮能获得(m/n)^2*(sum/n)无穷无尽的摇下去,一共能获得sum/n*(1+p + p^2+`````+p^k + ````),其中p = m/n将式子化简,就能得到E = sum/(n-m)。所以当sum = 0时为0,n=m时为inf。其余就为sum/(n-m)。贴代码: 1 #include 2 int 阅读全文

posted @ 2013-08-17 21:44 allh123 阅读(330) 评论(0) 推荐(0) 编辑

水题 不要62 HDU 2089

摘要: 先预处理出所有的数是不是可能拿来用,我的想法是记录1-i这个区间内可用的数为s[i].输入a,b.答案就为s[b] - s[a-1].贴代码: 1 #include 2 #define N 1000010 3 int sum[N]; 4 bool check(int x) 5 { 6 while(x) 7 { 8 int t = x%10; 9 if(t == 4) return false;10 if( t == 2 && (x/10%10) == 6) return false;11 x /= 10;12 ... 阅读全文

posted @ 2013-08-17 21:09 allh123 阅读(115) 评论(0) 推荐(0) 编辑

抓老鼠 codeForce 148D - Bag of mice 概率DP

摘要: 设dp[i][j]为有白老鼠i只,黑老鼠j只时轮到公主取时,公主赢的概率。那么当i = 0 时,为0当j = 0时,为1公主可直接取出白老鼠一只赢的概率为i/(i+j)公主取出了黑老鼠,龙必然也要取出黑老鼠公主才能赢,跑出来的老鼠有两种可能跑出来的是黑老鼠,公主赢的概率为dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3].(j>=3)跑出来的是白老鼠,公主赢的概率为dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2].(j>=2)贴代码: 1 #includ 阅读全文

posted @ 2013-08-17 19:01 allh123 阅读(311) 评论(0) 推荐(0) 编辑

ZOJ 3551 吸血鬼 概率DP

摘要: 解题报告链接:http://www.cnblogs.com/183zyz/archive/2012/09/13/2683524.html做法:设当有i个吸血鬼时变成n个吸血鬼的天数的数学期望为dp[i].pi为人和吸血鬼相遇的概率,pi = i*(n-i)/cn2 . cn2表示从n个人中选两个人出来的选法,那么人和吸血鬼相遇的选法为i*(n-i).p为人变吸血鬼的概率。则有dp[i] = p*pi*(dp[i+1]+1)+(1-p*pi)(dp[i+1]+1)化为:dp[i] = dp[i+1] + 1/(p*pi)有dp[n] = 0;很容易得到dp[1] = sum(1/(p*pi)) 阅读全文

posted @ 2013-08-17 16:35 allh123 阅读(258) 评论(0) 推荐(0) 编辑

poj 2151 Check the difficulty of problems 概率DP

摘要: 解题链接:http://www.cnblogs.com/183zyz/archive/2012/09/13/2683524.html这题算是概率DP里的简单题,由于各种独立,所有设dp[i][j][k]为第i个队在做到第j个题时解了k个题的概率,针对第j个题,有解出和未解出两种可能。所以就会有dp[i][j][k] += dp[i][j-1][k-1]*p[i][j]; //解出dp[i][j][k] += dp[i][j-1][k]*(1-p[i][j]);//未解出然后题目要求算每个队至少解出一个且存在一个解出的题目数>=n 的概率设p1为每个队至少解出一个题的概率,p2为每个队解出 阅读全文

posted @ 2013-08-17 14:59 allh123 阅读(175) 评论(0) 推荐(0) 编辑

HDU 4681 string 求最长公共子序列的简单DP+暴力枚举

摘要: 先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍。再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束将这些起始位置先记录下来,然后枚举这些位置,最大的值输出,看一下代码,你就会顿悟了····哈哈。贴代码: 1 #include 2 #include 3 #include 4 #define N 1005 5 using namespace std; 6 char a[2][N],b[N];//a[0]为串a,a[1]为串b,b为串c 7 int dp1[N][N],dp2 阅读全文

posted @ 2013-08-17 11:06 allh123 阅读(276) 评论(0) 推荐(0) 编辑

2013年8月16日

HDU 1814 模板题 2-sat

摘要: 敲模板做的,不知道怎么就对了,注意一下建边即可···贴代码: 1 #include 2 #include 3 using namespace std; 4 #define N 16005 5 struct twosat 6 { 7 int n; 8 vector g[N*2]; 9 bool vis[N*2];10 int path[N*2];11 int c;12 13 bool dfs(int x)14 {15 if(vis[x^1]) return false;16 if(vis[x]) return... 阅读全文

posted @ 2013-08-16 19:08 allh123 阅读(232) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 ··· 12 下一页

导航