hdu4389 Xmod f(x) 数位DP
2015-09-03 15:01
295 查看
题意:求区间[a, b]之间有多少个数是xmode(x各位数)之和为0.
分析:发现自己数位DP好弱,不仅参考别人思路,而且自己敲代码还WA到吐血,归根到底是自己还没有 理解这道题的具体思路
1、这道题有人打表过了每隔10W算出来一个数值,开个数组记录下来,最后会很容易计算出来
2、发现自己预处理+递推还是不会做,看题解也看不懂
3、每个数各位数之和为1~81,所以可以枚举mode,dfs计算从最高位到最低位的sum且x%mode = 0即可。
对本题来讲设f[pos][mode][sum][remain]表示 pos位前(从左到右)模为mode,和为sum,X pos位之前%mode的余数为remain的方案数
发现很多数位DP都可以用dfs来做,以后要敢想,敢增加维度,
分析:发现自己数位DP好弱,不仅参考别人思路,而且自己敲代码还WA到吐血,归根到底是自己还没有 理解这道题的具体思路
1、这道题有人打表过了每隔10W算出来一个数值,开个数组记录下来,最后会很容易计算出来
2、发现自己预处理+递推还是不会做,看题解也看不懂
3、每个数各位数之和为1~81,所以可以枚举mode,dfs计算从最高位到最低位的sum且x%mode = 0即可。
对本题来讲设f[pos][mode][sum][remain]表示 pos位前(从左到右)模为mode,和为sum,X pos位之前%mode的余数为remain的方案数
发现很多数位DP都可以用dfs来做,以后要敢想,敢增加维度,
#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> using namespace std; #define ll __int64 int bit[25]; int f[12][82][82][82]; int dfs(int pos, int mode, int remain, int sum, int flag)//flag表示前一位与前一位的最高位不同 { if (pos == 0) return sum == mode && remain == 0; if (flag && f[pos][mode][sum][remain] != -1) return f[pos][mode][sum][remain]; int mmax = flag ? 9 : bit[pos]; int ans = 0; for (int i = 0; i <= mmax; i++) { int tmp = (remain*10 + i) % mode; ans += dfs(pos-1, mode, tmp, sum+i, flag || i < mmax); } if (flag) f[pos][mode][sum][remain] = ans; return ans; } int solve(int x) { int len = 0, tmp = x; while (tmp)//把该数放到数组里 { bit[++len] = tmp % 10; tmp /= 10; } int ans = 0; for (int i = 1; i <= 81; i++)//枚举余数一共81种情况 ans += dfs(len, i, 0, 0, 0); return ans; } int main() { int t; cin >> t; int kcase = 0; memset(f, -1, sizeof(f));//初始化 while (t--) { int a, b; scanf("%d%d", &a, &b); printf("Case %d: %d\n", ++kcase, solve(b)-solve(a-1)); } return 0; }
相关文章推荐
- html 文本标签
- 1058. A+B in Hogwarts (20) -- 数据范围问题
- 一道关于笔试的多线程题目
- 后台开发面试准备2:linux共享内存
- python2.7学习笔记(8) ——模块
- 绘图与动画之使用自定义属性与颜色渐变实现色带加载动画
- TCP/IP、Http等各层协议汇总表
- ios开发 UI阶段第八周
- android性能优化之SparseArray
- LTE学习:LTE系统中RB、RBG、CCE、REG分别是如何定义的
- NOIP2014联合权值
- 一名程序员的自我修养
- JavaScript-概述
- scanf和gets的几个区别
- Android drawable中xml标签属性
- 小议:SharePoint 2013如何创建与Web Application不同的Host Header Site Collection?
- 为什么网页背景图片都切开
- UINavigationController
- java_servlet字符过滤器filter
- 不相交数据结构