acdream 1064 完美数 数位dp
来源:互联网 发布:西门子工业软件报价 编辑:程序博客网 时间:2024/05/20 05:04
完美数
Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)
SubmitStatisticNext Problem
Problem Description
8是中国人很喜欢的一个数字,但是如果有3的存在就变成了38,就不是很好了。。
你能告诉我,在[L, R] 的正整数区间内,要么包含3 要么包含 8 的不同的整数有多少个么?
Input
第一行一个整数T (T ≤ 10000),代表数据的组数
对于每组数据给两个整数 L, R (1 ≤ L ≤ R ≤ 1e9)
Output
对于每组数据,给一个整数为答案。
Sample Input
31 1001 38 8
Sample Output
3411
Source
buaads
思路:设dp[pos][s]为当前考虑pos位,在之前状态为s的情况下,(pos+1)个数位的组合满足条件的个数。其中s=1表示当前只有位不包含8,s=2,表示当前不包含3,s=0,表示之前3和8都不包含。详见代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=15;int bit[MAXN];int dp[MAXN][5];int dfs(int pos,int s,int flag) { if(pos == -1) return s == 1 || s == 2; if(flag && dp[pos][s]!=-1) return dp[pos][s]; int ans=0; int x= flag ? 9 : bit[pos]; for(int i=0;i<=x;i++){ int k=s; if(i == 3) k=s|1; if(i == 8) k=s|2; ans+=dfs(pos-1,k,flag || i<x); } if(flag) dp[pos][s]=ans; return ans;}int solve(int x){ int len=0; while(x){ bit[len++]=x%10; x/=10; } return dfs(len-1,0,0);}int main(){ int T; scanf("%d",&T); memset(dp,-1,sizeof(dp)); while(T--){ int l,r; scanf("%d%d",&l,&r); printf("%d\n",solve(r)-solve(l-1)); } return 0;}
0 0
- acdream 1064 完美数 数位dp
- acdream 1064 完美数 (数位dp)
- ACdream 1064 完美数(数位dp)
- ACdream 1064 完美数【数位DP】
- ACDream 1064——完美数(数位DP)
- acdream 数树专题--完美数(数位dp)
- ACdream群OJ-完美数-简单数位dp
- ACDream 1064 完美数
- ACdream 1064 完美数
- ACdream 1064 完美数
- ACdream 1064完美数
- 51nod1232 完美数 数位DP
- AcDream 1083: 完美数
- ACdream OJ 完美数
- ACdream 完美数
- XMUT ACdream DP专场E题 - 喵哈哈的日常选数问题(数位DP)
- 51nod 1232 完美数 / codeforces 55D 数位DP
- ACdream群OJ 1122 数位DP
- android TabHost的一种用RadioButton来实现的切换
- POJ 3020 Antenna Placement ,二分图的最小路径覆盖
- eclipse 如何用 link 方式安装 SVN 插件
- zoj 1058 Currency Exchange
- Hometask--LCA
- acdream 1064 完美数 数位dp
- 求循环变换序列中逆序对的个数
- HTML学习之HTML常用标签(一)
- LeetCode Single Number
- java赋值运算符
- [HDU1370]中国剩余定理版
- 检验九宫格答案的正确性
- javascript图片预加载-解决图片延迟响应慢
- 8 Ways Improve ASP.NET Web API Performance