hdu 4722(记忆化搜索)

来源:互联网 发布:linux多线程编程 书籍 编辑:程序博客网 时间:2024/05/22 08:27

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722

思路:简单的记忆化搜索,留意一下A==0时的情况就可以了。

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 typedef long long ll; 7  8 int digit[22]; 9 ll dp[22][12];10 11 ll dfs(int pos,int pre,int doing)12 {13     if(pos==-1){14         return pre==0;15     }16     if(!doing&&dp[pos][pre]!=-1){17         return dp[pos][pre];18     }19     int end=doing?digit[pos]:9;20     ll ans=0;21     for(int i=0;i<=end;i++){22         int npre=(pre+i)%10;23         ans+=dfs(pos-1,npre,doing&&i==end);24     }25     if(!doing){26         dp[pos][pre]=ans;27     }28     return ans;29 }30     31 32 ll Solve(ll n)33 {34     int pos=0;35     while(n){36         digit[pos++]=n%10;37         n/=10;38     }39     return dfs(pos-1,0,1);40 }41 42 int main()43 {44     ll a,b;45     int t=1,_case;46     memset(dp,-1,sizeof(dp));47     scanf("%d",&_case);48     while(_case--){49         scanf("%I64d%I64d",&a,&b);50         printf("Case #%d: ",t++);51         if(a==0){52             printf("%I64d\n",Solve(b));53         }else 54             printf("%I64d\n",Solve(b)-Solve(a-1));55     }56     return 0;57 }58 59 60     
View Code

 

0 0
原创粉丝点击