2014年3月14日

[专题总结]数位DP

摘要: 总结:1:第i个数符合要求了,所以接下来的数都可以。如果没限制, 那么是有 10i-1 个。如果有限制,那么是 (nowx % 10i-1)+1 。2:两种状态设置 有设状态d 没设状态d含义 d开头的i位数.. 所有i位数..写法差别 end = ...?num[i-1]:9 end = ...?num[i]:9注意点 / 在循环中出现即时计算时,判断限制的条件为(isQuery && j==end)3:此类DP,考虑转移的时候,应当 同时考虑查询 时候的情况4:这里的记忆化搜索不太一样喔, 出口一定... 阅读全文

posted @ 2014-03-14 20:32 ShineCheng 阅读(148) 评论(0) 推荐(0)

UPC 2223: A-Number and B-Number(数位DP+二分)

摘要: 积累点:1: (l&r)+((l^r)>>1) == (l+r)/2 2: 注意判断现在是否有限制。当枚举下一个量时,是(isQuery && j==end),不要搞错。传送门:http://acm.upc.edu.cn/problem.php?id=2223题意:能被7整除或者含7的数称为A-Number,所有A-Number从小到大写好,下标编号(从1开始),去掉那些下标为A-Number的数,剩下的数称为B-Number。求第N个B-Number是多少。思路:求A-Number就是简单的数位DP。dp[i][mod] 表示所有i位数中,%7==mod 阅读全文

posted @ 2014-03-14 20:18 ShineCheng 阅读(420) 评论(0) 推荐(0)

LightOJ - 1032 Fast Bit Calculations (数位DP)

摘要: 类型:数位DP题意:[0,N]范围内所有数的二进制表示,问出现"11"的次数。(“111”计为两次) (0 ≤ N #include int num[50];long long dp[50][2];long long nowx;long long dfs(int i, int d, bool isQuery) { if (i == 1) { return 0; } long long &nowdp = dp[i][d]; if (!isQuery && ~nowdp) return nowdp; int end = isQuery?num[i-1]: 阅读全文

posted @ 2014-03-14 14:25 ShineCheng 阅读(229) 评论(0) 推荐(0)

HDU 4734: F(x) (数位DP)

摘要: 总结:去数字那维的方法,就是改成循环里面枚举当前位(之前的做法是枚举下一位)抽象出口,可以从前一个有意义的状态来推导出其意义。类型:数位DP题意:F(x) = A n * 2 n-1 + A n-1 * 2 n-2 + ... + A 2 * 2 + A 1 * 1.问[0,B]之间满足F(x) num[i])定义:dp[i][f] 表示所有i位数中(含前导0),F() #include int dp[12][10000];int num[30];int getf(int x) { int ans = 0; int len = 0; while (x) { a... 阅读全文

posted @ 2014-03-14 12:07 ShineCheng 阅读(206) 评论(0) 推荐(0)

导航