您的位置:首页 > 其它

hdu-2089 不要62[数位dp]

2016-05-06 08:30 375 查看
比较基础的一道数位dp。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 12
int 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: