hdu-2089 不要62[数位dp]

来源:互联网 发布:装修 知乎 编辑:程序博客网 时间:2024/06/06 03:41

比较基础的一道数位dp。

#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX_SIZE 12int dp[MAX_SIZE][MAX_SIZE];int num[MAX_SIZE]; int dfs(int pos,int i,bool lim){if(pos==-1) return 1;if(!lim&&~dp[pos][i]) return dp[pos][i];int res=0;int up=lim?num[pos]:9;for(int d=0;d<=up;++d){if(d==4||(i==6&&d==2))continue;res+=dfs(pos-1,d,lim&&d==up);}return lim?res:dp[pos][i]=res;}int find(int x){int i=0;while(x) { num[i++]=x%10;x/=10;}num[i]=0;return dfs(i,0,1);}void init(){memset(dp,-1,sizeof(dp));}int main(){int n,m;while(~scanf("%d%d",&n,&m)){if(n==0&&m==0)break;init();printf("%d\n",find(m)-find(n-1));}return 0;}


0 0