【HDU3555】 Bomb

来源:互联网 发布:大数据 a股 编辑:程序博客网 时间:2024/06/04 23:26

Problem

http://acm.hdu.edu.cn/showproblem.php?pid=3555

Solution

记忆化搜索数位DP模板题,写记忆化真的简单

CODE

/* * @key word:digit DP * @tesed on:HDU3555 31ms * @Author: lhq  * @Date: 2017-08-15 12:57:25  * @Last Modified by:   lhq  * @Last Modified time: 2017-08-15 12:57:25  */#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define ll long longint T,a[20];ll dp[20][2][2],n;ll dfs(int len,bool sta,bool pre,bool limit){    if (len==0) return sta?1:0;    if (!limit && dp[len][sta][pre]!=-1) return dp[len][sta][pre];    int up=limit?a[len]:9;    ll ans=0;    for (int i=0;i<=up;i++)        ans+=dfs(len-1,sta || pre && i==9,i==4,limit && i==up);    if (!limit) dp[len][sta][pre]=ans;    return ans;}ll solve(ll x){    int len=0;    while (x)    {        a[++len]=x%10;        x/=10;    }    return dfs(len,false,false,true);}int main(){    memset(dp,-1,sizeof(dp));    scanf("%d",&T);    while (T--)    {        scanf("%lld",&n);        printf("%lld\n",solve(n));    }    return 0;}
原创粉丝点击