2014年3月13日

LightOJ 1140: How Many Zeroes? (数位DP)

摘要: 当前数位DP还不理解的点:1:出口用i==0的方式2:如何省略状态d(就是枚举下一个数的那个状态。当然枚举还是要的,怎么把空间省了)总结:1:此类DP,考虑转移的时候,应当同时考虑查询时候的情况。2:考虑x在第i位之后,能遍历多少数字,其答案为(x%10i-1+1) 3:这里的记忆化搜索不太一样喔,出口一定要写在递归里,不然,查询状态下差到出口就会出错了~类型:数位DP题意:求[A,B]区间内的所有数,写下来之后,0的个数。(a,b 为 unsigned int)思路:我的笨拙暴力状态:dp[i][d][okPre] 表示d开头的i位数,(okPre表示计算前导0的情况下,反之~),的0的个数 阅读全文

posted @ 2014-03-13 21:52 ShineCheng 阅读(431) 评论(0) 推荐(0) 编辑

HDU 2089:不要62(数位DP)

摘要: 类型:数位DP题意:定义一个好的数为 没有出现“4”和“62” 这样的数。问[n,m]之间有多少这样的数。(0#include int dp[15][10];int num[120];int dfs(int i, int now, bool iscount) { if (!iscount && dp[i][now] != -1) return dp[i][now]; if (i == 1) { if (now == 4) return dp[i][now] = 0; else return dp[i][now] = 1; } int end ... 阅读全文

posted @ 2014-03-13 20:20 ShineCheng 阅读(153) 评论(0) 推荐(0) 编辑

HDU 4722:Good Numbers(数位DP)

摘要: 类型:数位DP题意:定义一个Good Number 为 一个数所有位数相加的和%10==0.问[A,B]之间有多少Good Number.方法:正常“暴力”的定义状态:(i,d,相关量)定义dp[i][d][mod] 为 d开头的i位数中,%10==mod的数的个数dp[i][d][mod] = sum(dp[i-1][0~9][(mod-d+10)%10]出口:dp[1][d][mod] = (d==mod);代码:#include #include #include #include using namespace std;long long dp[20][10][10];int num[ 阅读全文

posted @ 2014-03-13 20:13 ShineCheng 阅读(180) 评论(0) 推荐(0) 编辑

导航