摘要: 题目大概是抢劫银行,每家银行都有一个收益和一个被抓的概率,求在被抓概率小于P的条件下能获得的最大收益。 dp[i][j]表示抢劫前i家银行收益为j被抓的最小概率 dp[0][0]=0 dp[i][j]=min(dp[i-1][j],dp[i-1][j-m[i]]+(1-dp[i-1][j-m[i]] 阅读全文
posted @ 2016-02-01 22:51 WABoss 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题目问一个数字字符串的不重复全排列有几个能被d整除。 dp[S][m]表示用字符集合S构成的%d为m的数字字符串个数 dp[0][0]=0 我为人人转移,dp[S+{x}][(m*10+str[x]-'0')%d]+=dp[S][m](x∉S) 最后的结果再除以各字符出现次数的阶乘就是答案了,即dp 阅读全文
posted @ 2016-02-01 22:45 WABoss 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 题目是在n*n的棋盘上放k个车使其不互相攻击的方案数。 首先可以明确的是n*n最多只能合法地放n个车,即每一行都指派一个列去放车。 dp[i][j]表示棋盘前i行总共放了j个车的方案数 dp[0][0]=1 转移就是从第i-1行转移到第i行,对于第i行要嘛放上一个车要嘛不放,放的话有n-j-1种方法 阅读全文
posted @ 2016-02-01 20:43 WABoss 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题目问一个合法字符串的字典序是第几个,合法的字符串是指里面的字符严格递增。 先判断合不合法,然后用类似康托展开的过程去求。大概过程就是用组合数算出某长度某前缀有几个,累加起来。 真难一遍写对。。 1 #include<cstdio> 2 #include<cstring> 3 using names 阅读全文
posted @ 2016-02-01 15:59 WABoss 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 题目问区间有多少个数字的二进制0的个数大于等于1的个数。 用数学方法求出0到n区间的合法个数,然后用类似数位DP的统计思想。 我大概是这么求的,确定前缀的0和1,然后后面就是若干个0和若干个1的不重复全排列数。。 写得挺痛苦的。。另外A[i][j]表示i个0和j个1的不重复全排列数,即A[i][j] 阅读全文
posted @ 2016-02-01 11:38 WABoss 阅读(203) 评论(0) 推荐(0) 编辑