HDU 4389 X mod f(x) (数位dp)
2015-09-05 21:11
459 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4389
题意:对于一个数x,先求出各位数之和 f(x),如果 x mod f(x) 等于0,则满足条件。求出数n到m中满足条件的数的个数。
思路:用数位dp记忆化搜索模版。
代码:
题意:对于一个数x,先求出各位数之和 f(x),如果 x mod f(x) 等于0,则满足条件。求出数n到m中满足条件的数的个数。
思路:用数位dp记忆化搜索模版。
代码:
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #define MOD 1000000007 #define INF 0x7fffffff using namespace std; typedef long long ll; int bit[20], ans[55]; int f[20][90][90]; int dp(int pos, int flag, int cur, int left, int sum) { //printf("%d %d %d %d %d\n", pos, flag, cur, left, sum); //第len到第pos+1位已确定,现在确定第pos位 //flag=1,不论pos位为什么都比给定的数小 //当前的除数是cur //第len到第pos+1位确定的数除以cur余left //已确定的位数相加和为sum if(pos == 0) { if(cur == sum && left == 0) return 1; else return 0; } if(flag && f[pos][left][sum] != -1) return f[pos][left][sum]; int ans = 0; int x = flag ? 9 : bit[pos]; for(int i = 0; i <= x; i++) { ans += dp(pos - 1, flag || i < x, cur, (left * 10 + i) % cur, sum + i); } if(flag) f[pos][left][sum] = ans; return ans; } int cal(int n, int cur) { int len = 0; while(n) { bit[++len] = n % 10; n /= 10; } int res = dp(len, 0, cur, 0, 0); return res; } int main() { #ifdef LOCAL freopen("dpdata.txt", "r", stdin); #endif int t; int s[55], e[55]; memset(f, -1, sizeof(f)); scanf("%d", &t); for(int i = 1; i <= t; i++) { scanf("%d%d", &s[i], &e[i]); ans[i] = 0; } for(int cur = 1; cur <= 81; cur++) { //求f(x)=cur且被cur整除的数的个数 memset(f, -1, sizeof(f)); //cur不同对应f数组不同,考虑f数组初始化的时间,所以调整处理数据的顺序 for(int i = 1; i <= t; i++) { ans[i] += cal(e[i], cur) - cal(s[i] - 1, cur); } } for(int cas = 1; cas <= t; cas++) { printf("Case %d: %d\n", cas, ans[cas]); } return 0; }
相关文章推荐
- [连载]Tutorial series: learning how to write a 3D soft engine from scratch in C#, TypeScript or JavaScript[英]
- 关于CenttOS的防火墙问题
- Linux-ubuntu桌面版启动切换文字版
- 高效运维最佳实践(03):Redis集群技术及Codis实践
- IOS开发UI进阶之UITableView二
- 旋转数组
- const在c++中的用法分析
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
- css样式表1
- web系统测试之刃
- 1010. 一元多项式求导 (25)
- GitHub上整理的一些工具
- eclipse启动报i386\jvm.cfg
- CentOS6设置Django开发环境
- unity优化
- dos进去mysql导入数据库
- PHP 设计模式之观察者模式
- 动漫谈---海贼王之基德篇
- ThinkPHP下的RBAC权限访问理解【笔记】
- CentOS安装及配置hadoop