UESTC 250 windy数 (数位DP)
2016-03-24 01:15
405 查看
windy定义了一种windy数。
不含前导零且相邻两个数字之差至少为22的正整数被称为windy数。
windy想知道,在AA和BB之间,包括AA和BB,总共有多少个windy数?
包含两个整数,AA BB。
满足 1≤A≤B≤20000000001≤A≤B≤2000000000 .
Windy
不含前导零且相邻两个数字之差至少为22的正整数被称为windy数。
windy想知道,在AA和BB之间,包括AA和BB,总共有多少个windy数?
Input
包含两个整数,AA BB。满足 1≤A≤B≤20000000001≤A≤B≤2000000000 .
Output
Sample input and output
Sample Input | Sample Output |
---|---|
1 10 | 9 |
Source
Windy#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[22][22]; int bits[22]; int abs(int num) { if(num<0) num=-num; return num; } void init() { int i,j,k; for(i=0;i<10;i++) dp[1][i]=1; for(i=2;i<=12;i++) { for(j=0;j<10;j++) { for(k=0;k<10;k++) if(abs(j-k)>1) dp[i][j]+=dp[i-1][k]; } } } int work(int n) { int i,j,k,len=0; while(n) { bits[++len]=n%10; n/=10; } int ans=0; for(i=1;i<len;i++) { for(j=1;j<10;j++) ans+=dp[i][j]; } for(i=1;i<bits[len];i++) ans+=dp[len][i]; for(i=len-1;i;i--) { for(j=0;j<bits[i];j++) if(abs(bits[i+1]-j)>1) ans+=dp[i][j]; if(abs(bits[i+1]-bits[i])<2) break; } return ans; } int main() { int n,m; init(); while(cin>>n>>m) { // cout<<work(n)<<endl; cout<<work(m+1)-work(n)<<endl; } return 0; }
相关文章推荐
- UI-UIImageView的图片填充方式(contentMode)_图片作为控件背景图的拉伸方式(stretch)介绍
- SUID、SGID、Sticky
- jfinal+ueditor上传图片、文件报“未找到上传数据错误”的解决方案
- XIB文件上UIScrollView的约束
- Ciso WLC命令行添加Wifi Guest 帐号
- iOS 的UIView 的hitTest的分析
- 用SoapUI进行Webservice的性能压力测试
- iPhone6&iPhone6 Plus CSS3 Media Queries
- Patchwork & Quilting(拼布和绗缝)
- What is Bluetooth Profile[待翻译]
- Qt在线技术交流之OpenGL、Quick以及所经历项目开发心得分享
- Location Services and Maps Programming Guide 纪录
- UESTC 1144 Big Brother
- HDU5288 OO’s Sequence 二分
- Quartz学习笔记(五) quartz扩展druid连接池
- leetcode_063 Unique Paths II
- UICollectionView
- iOS--UITableView 显示二级菜单
- leetcode_062 Unique Paths
- iOS之UIAlertView的使用