Faulty Odometer HDU

来源:互联网 发布:淘宝网限制登录申诉 编辑:程序博客网 时间:2024/06/05 06:26

题意:

在所有位数上,没有3,8,询问数字个数。(之前读错题了。。写了发数位DP。。)

思路:

也没什么好标记的,数位DP。。连个状态都没。。

#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;ll digit[100];ll dp[15];ll dfs(int len,bool isLimit){    if(!isLimit&&dp[len]!=-1)        return dp[len];    if(len<=0)        return 1;    int last=(isLimit==1?digit[len]:9);    ll ans=0;    for(int i=0;i<=last;i++)    {      //  if(len>=6&&len<=8 || len<=3&&len>=1  )            if(i==3||i==8) continue;        ans+=dfs(len-1,isLimit&&i==last);    }    if(!isLimit)        dp[len]=ans;    return ans;}ll solve(ll n){    int cnt=0;    while(n)    {        digit[++cnt]=n%10;        n/=10;    }    return dfs( cnt,true);}int main(){    memset(dp,-1,sizeof dp);    ll n;    while(~scanf("%lld",&n),n)    {        printf("%lld: ",n);        printf("%lld\n",solve(n)-1);    }}

原创粉丝点击