HDU 2089 不要62(数位DP)
2016-02-12 18:04
295 查看
跟这一篇差不多 /article/3672737.html
[code]#include<map> #include<set> #include<queue> #include<stack> #include<math.h> #include<string> #include<vector> #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; #define maxn 1005 #define f(x) (x*1.0) #define inf 0x3f3f3f3f #define maxm maxn*maxn #define min(a,b) (a>b?b:a) #define max(a,b) (a>b?a:b) #define lowbit(x) (x&(-x)) #define cheak(i) printf("%d ",i) #define lson(x) (splay[x].son[0]) #define rson(x) (splay[x].son[1]) #define rfor(i,a,b) for(i=a;i<=b;++i) #define lfor(i,a,b) for(i=a;i>=b;--i) #define mem(a,b) memset(a,b,sizeof(a)) #define mec(a,b) memcpy(a,b,sizeof(b)) //0 不含 //1 不含且最高位是2 //2 含不吉利数字 int dp[25][3]; void init() { dp[0][0]=1; dp[0][1]=dp[0][2]=0; int i; rfor(i,1,20) { dp[i][0]=dp[i-1][0]*9-dp[i-1][1]; dp[i][1]=dp[i-1][0]; dp[i][2]=dp[i-1][2]*10+dp[i-1][0]+dp[i-1][1]; } } int A[25]; int solve(int x) { int len=0,ans=0,i; while(x) { A[++len]=x%10; x/=10; } A[len+1]=0; bool flag=false; lfor(i,len,1) { ans+=dp[i-1][2]*A[i]; if(flag) ans+=dp[i-1][0]*A[i]; else { if(A[i]>4) ans+=dp[i-1][0]; if(A[i]>6) ans+=dp[i-1][1]; if(A[i+1]==6&&A[i]>2) ans+=dp[i][1]; } if(A[i]==4||A[i]==2&&A[i+1]==6) flag=true; } if(flag) ans++; return ans; } int main() { int l,r; init(); while(~scanf("%d%d",&l,&r)) { if(!l&&!r) break; l--; int ans=r-l; l=solve(l); r=solve(r); ans-=r-l; printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu 5432 Pyramid Split【二分查找】
- 计蒜客 挑战难题 最后一个单词的长度
- POJ 3252 Round Numbers(数位DP)
- TLB原理
- 操作系统之GDT和IDT(三)
- cash and buffer
- byte[1024]
- 常用加密算法
- Redhat利用漏洞提权
- .Net之道
- 函数指针与回调函数
- android、Java下判断两个String是否相等 、EditText输入是否为空,
- 线程同步 - 互斥量
- bash脚本之一(变量+数组)
- [C++]标准库容器
- vector
- pthread_cleanup_push与pthread_cleanup_pop的目的 作用
- 【翻译自mos文章】OGG的集成捕捉模式支持Oracle database标准版么?
- Android ImageButton的使用。
- 开源库FlycoRoundView解析