HDU2089: 不要62
【传送门:HDU2089】
简要题意:
给出l,r,求出l到r中的数中不存在4或者62的数的个数
题解:
数位DP,第一题
参考代码:
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int f[8][10]; void getdp() { f[0][0]=1; for(int i=1;i<=7;i++) { for(int j=0;j<=9;j++) { if(j==4) f[i][j]=0; else { for(int k=0;k<=9;k++) { if(k==2&&j==6) continue; f[i][j]+=f[i-1][k]; } } } } } int a[8]; int solve(int x) { int cnt=0; while(x!=0) { a[++cnt]=x%10; x/=10; } a[cnt+1]=0; int ans=0; for(int i=cnt;i>=1;i--) { for(int j=0;j<a[i];j++) { if(j!=4&&(a[i+1]!=6||j!=2)) { ans+=f[i][j]; } } if(a[i]==4) break; if(a[i+1]==6&&a[i]==2) break; } return ans; } int main() { getdp(); int l,r; while(scanf("%d%d",&l,&r)!=EOF) { if(l==0&&r==0) break; printf("%d\n",solve(r+1)-solve(l)); } return 0; }
渺渺时空,茫茫人海,与君相遇,幸甚幸甚