HDU 2089 不要62(数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
题意
求一个区间内,不出现4和连续的62的数的个数。
分析
可以暴力打表。也可以数位DP。
设:
dp[i][0],表示长度为i,不存在不吉利数字
dp[i][1],表示长度为i,不存在不吉利数字,且最高位为2
dp[i][2],表示长度为i,存在不吉利数字
状态定义好了,转移比较简单。
在计算时,按位分解,考虑当前位能否放4或6,详情看代码。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<algorithm> #include<cstring> #include<queue> #include<vector> #include<bitset> #include<map> #include<deque> #include<stack> using namespace std; typedef pair<int,int> pii; #define X first #define Y second #define pb push_back #define mp make_pair typedef long long ll; #define ms(a,b) memset(a,b,sizeof(a)) const int inf = 0x3f3f3f3f; const int maxn = 1e6; const int mod = 1e9+7;#define lson l,m,2*rt #define rson m+1,r,2*rt+1 int dp[10][3];void init(){dp[0][0]=1;dp[0][1]=dp[0][2]=0;for(int i=1;i<7;i++){dp[i][0]=9*dp[i-1][0]-dp[i-1][1]; //在最高位加上除4以外的9个数字,但要减掉2之前加上6dp[i][1]=dp[i-1][0]; //在不含不吉利数字的最高位加上2dp[i][2]=dp[i-1][0]+dp[i-1][1]+10*dp[i-1][2]; //在已有不吉利数字前加任意数字,或者无不吉利数字的最高位加4,或者在2前面加6} } int bit[10];int solve(int x){int t=x;int len=0;while(t){bit[++len]=t%10;t/=10;}bit[len+1]=0;int ans=0;bool flag=false;for(int i=len;i>=1;i--){ans += dp[i-1][2]*bit[i];if(flag) ans+=dp[i-1][0]*bit[i]; //高位已经出现4或者62,后面随意else{if(bit[i]>4) ans+=dp[i-1][0]; if(bit[i+1]==6&&bit[i]>2) ans+=dp[i][1];if(bit[i]>6) ans+=dp[i-1][1];}if(bit[i]==4 || (bit[i+1]==6&&bit[i]==2)) flag=true;}if(flag) ans++;return x-ans; } int main(){ #ifdef LOCALfreopen("in.txt","r",stdin); #endif // LOCALint l,r;init();while(scanf("%d%d",&l,&r)&&(l||r)){printf("%d\n",solve(r)-solve(l-1));}return 0; }
以下是暴力打表的代码
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<algorithm> #include<cstring> #include<queue> #include<vector> #include<bitset> #include<map> #include<deque> #include<stack> using namespace std; typedef pair<int,int> pii; #define X first #define Y second #define pb push_back #define mp make_pair typedef long long ll; #define ms(a,b) memset(a,b,sizeof(a)) const int inf = 0x3f3f3f3f; const int maxn = 1e6; const int mod = 1e9+7;#define lson l,m,2*rt #define rson m+1,r,2*rt+1 int dp[maxn+5];void init(){dp[0]=0;for(int i=1;i<maxn;i++){dp[i]=dp[i-1];bool f=0;int pre=0;int x=i;while(x){if(x%10==4){f=1;break;}else if(pre==2&&x%10==6){f=1;break;}pre=x%10;x/=10;}if(f){dp[i]++;}} }int main(){ #ifdef LOCALfreopen("in.txt","r",stdin); #endif // LOCALint l,r;init();while(scanf("%d%d",&l,&r)&&(l||r)){printf("%d\n",r-l+1-(dp[r]-dp[l-1]));}return 0; }
转载于:https://www.cnblogs.com/fht-litost/p/8969961.html
HDU 2089 不要62(数位DP)相关推荐
- HDU 2089 不要62 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目描述: 给定一个区间, 让你求这个区间中所有不带62 或 4 的数的个数 解题思路: 很明 ...
- Hdu 2089-不要62 数位dp
题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others) Me ...
- HDU - 2089 不要62 【暴力打表】【数位DP】
不要62 HDU - 2089 题意 求区间[n,m]之间有多少个数字不含4或者连续的62 解法1 由于数据范围是0~1e6,所以直接暴力判断每一位数字是否含有4或者62,然后求前缀和即可 #incl ...
- hdu 2089 不要62【数位dp】
HDU 2089 求给定区间内不含62和4的数的个数. 数位dp入门.从这里我清楚了一些数位dp的用法.比如limit是判断是否达到上界,而且需要判断(!limit)..比如若题目要求不含11的个数, ...
- [HDU]2089不要62
http://acm.hdu.edu.cn/showproblem.php?pid=2089 这道题跟Bomb(http://www.cnblogs.com/sjy123/p/3247731.html ...
- 不要62 ---数位DP
题意:求m到n中不含62和4的数的个数. 题目链接 思路:数位dp模板求满足的数字或不满足的数字,刚学,就求不满足的数. #include<stdio.h> #include<str ...
- HDU 6156 Palindrome Function 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...
- hdu2089 不要62 数位dp
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 2089 不要62
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障 ...
最新文章
- Python——Entry、Text控件
- 深圳杯---无线回传拓扑规划
- 小猿圈Python之实现京东秒杀功能代码
- 动态使用webservice,以及含有ref类型的参数的问题
- 开启Apache mod_rewrite模块完全解答
- Java基础----对象与类
- lca---tarjan算法
- DLL文件无法删除怎么解决
- java矩阵连乘_算法设计与分析——矩阵连乘问题(动态规划)
- python 元组和列表区别_Python干货整理:一分钟了解元组与列表使用与区别
- jQuery 一些操作
- TreeView递归系统目录
- 课程目标 线程 java 1615387415
- Linux——用户管理简单学习笔记(三)
- 测试接口python常用命令_用python实现接口测试(四、操作MySQL)-阿里云开发者社区...
- qt新建html5,QT Creator无法创建纯C++项目或HTML5项目(QT Creator直接关闭)
- nginx关于错误页面重定向的问题
- P3373 线段树2(多重标记线段树)题解
- 通信电子线路实验-调幅模块仿真(发送与接收)
- excel自动填充下方相同数据