【BZOJ1026】【数位DP】windy数 题解
来源:互联网 发布:python matplotlib安装 编辑:程序博客网 时间:2024/06/05 12:50
Description
windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,
在A和B之间,包括A和B,总共有多少个windy数?
Input
包含两个整数,A B。
Output
一个整数
Sample Input
【输入样例一】
1 10
【输入样例二】
25 50
Sample Output
【输出样例一】
9
【输出样例二】
20
HINT
【数据规模和约定】
100%的数据,满足 1 <= A <= B <= 2000000000 。
裸的数位DP,恢复手感
#include <iostream>#include <cstdio>#include <algorithm>#define digit (ch < '0' || ch > '9')using namespace std;template <class T> inline void read(T &x) { int flag = 1; x = 0; register char ch = getchar(); while( digit) { if(ch == '-') flag = -1; ch = getchar(); } while(!digit) { x = (x<<1)+(x<<3)+ch-'0'; ch = getchar(); } x *= flag;}const int maxn = 20;int a,b,pos,lim,pre;int dp[maxn][maxn],num[maxn];inline int digitdp(int x) { if(!x) return 0; int tmp = 0, w = 10; while(num[w] > x) w--; for(register int i = 1; i < w; i++) for(register int j = 1; j <= 9; j++) tmp += dp[i][j]; lim = x/num[w]; for(register int i = 1; i < lim; i++) tmp += dp[w][i]; x %= num[w]; pre = lim; for(register int i = w-1; i; i--) { lim = x/num[i]; for(register int j = 0; i != 1 ? j < lim : j <= lim; j++) if(abs(pre-j) >= 2) tmp += dp[i][j]; if(abs(lim-pre) < 2) break; pre = lim; x %= num[i]; } return tmp;}int main () { read(a); read(b); num[1] = 1; for(register int i = 2; i <= 10; i++) num[i] = num[i-1]*10; for(register int i = 0; i <= 9; i++) dp[1][i] = 1; for(register int i = 2; i <= 10; i++) for(register int j = 0; j <= 9; j++) for(register int k = 0; k <= 9; k++) if(abs(j-k) >= 2) dp[i][j] += dp[i-1][k]; printf("%d",digitdp(b)-digitdp(a-1)); return 0;}
阅读全文
0 0
- 【BZOJ1026】【数位DP】windy数 题解
- BZOJ1026 windy数 数位DP
- 【BZOJ1026】windy数,数位DP
- bzoj1026 windy数(数位dp)
- 【数位DP】windy数 BZOJ1026 UESTC1307
- bzoj1026 [SCOI2009]windy数 数位dp
- bzoj1026: [SCOI2009]windy数 [简单数位dp]
- [BZOJ1026][SCOI2009]windy数 && 数位DP
- bzoj1026: [SCOI2009]windy数 数位dp
- bzoj1026: [SCOI2009]windy数 数位dp
- BZOJ1026 [SCOI2009]windy数(数位dp)
- [BZOJ1026]SCOI2009 windy数|数位DP
- 【BZOJ1026】【SCOI2009】windy数 数位DP
- 【bzoj1026】【SCOI2009】【windy数】【数位dp】
- 【数位DP】bzoj1026: [SCOI2009]windy数
- 【BZOJ1026】[SCOI2009]windy数【数位DP】
- bzoj1026: [SCOI2009]windy数-数位DP
- [SCOI2009] [BZOJ1026] Windy数 - 数位DP
- JVM(PART II)Eden Survivor名称由来
- php中面向对象的封装和继承
- Mybatis——可视化generator工具的介绍
- Servlet与Filter的区别
- 如何在Qt中安装事件过滤器
- 【BZOJ1026】【数位DP】windy数 题解
- 从键盘输入若干个字符,逐个存到磁盘文件data.txt中,直到输入’\n’为止,并将建立的文本文件的内容在存入文件的同时,在屏幕上显示出来:
- leetcode---word-search---dfs
- IEEE会议论文-Font Helvetica is not embedded
- Encrypt 原理记录
- NYOJ
- Yum命令常用命令详解
- 解决Win7系统DHCP Client服务已设置为“自动”开机仍然无法启动问题
- 代码自动化