hdu2089数位dp
2016-02-24 16:00
99 查看
题目很好懂。
思路学习别人的,第一次写数位dp。点击打开链接
思路学习别人的,第一次写数位dp。点击打开链接
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <fstream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> #include <iomanip> using namespace std; //#pragma comment(linker, "/STACK:102400000,102400000") #define maxn 10 #define MOD 1000000007 #define mem(a , b) memset(a , b , sizeof(a)) #define LL long long #define INF 100000000 int n , m; int dp[10][10]; void init() { mem(dp , 0); dp[0][0] = 1; for(int i = 1 ; i <= 7 ; i ++) { for(int j = 0 ; j < 10 ; j ++) { for(int k = 0 ; k < 10 ; k ++) { if(j != 4 && !(j == 6 && k == 2)) dp[i][j] += dp[i-1][k]; } } } } int solve(int n) { init(); int digit[10]; int pos = 0; while(n) { digit[++pos] = n % 10; n /= 10; } digit[pos+1] = 0; int ans = 0; for(int i = pos ; i ; i--) { for(int j = 0 ; j < digit[i] ; j ++) { if(j != 4 && !(digit[i+1] == 6 && j == 2)) ans += dp[i][j]; } if(digit[i] == 4 || (digit[i+1] == 6 && digit[i] == 2)) break; } return ans; } int main() { while(scanf("%d %d" , &n , &m) != EOF && (n || m)) { printf("%d\n" , solve(m+1) - solve(n)); } return 0; }
相关文章推荐
- CodeForces 629 A. Far Relative’s Birthday Cake(水~)
- 关于Python获取SQLSERVER数据库中文显示乱码问题
- RAM
- PHP获取远程文件的几种方式
- 安卓学习
- [转]Becoming a JavaScript ninja
- windows下 更新 android studio SDK 到最新版本 解决方案
- Android样式之drawable
- ajax post json数据字符被转义
- JAVA开发网站可以使用什么框架?
- Android中基于XMPP协议实现IM聊天程序与多人聊天室
- [Javascript]jquery判断页面元素是否存在
- 为何Math.abs(Integer.MIN_VALUE) = Integer.MIN_VALUE
- UITextField限制输入长度
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- HDU 3709 Balanced Number(数位dp)
- Rom
- 浅谈iOS视频开发
- LeetCode 236. Lowest Common Ancestor of a Binary Tree
- SElinux