Hdu3555---数位dp

Posted pandaking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hdu3555---数位dp相关的知识,希望对你有一定的参考价值。

这道题是hdu 3652的简单版本,它的容易之处在于hdu3652在求值的时候要保留其%13的余数,这道题不用!

技术分享图片
 1 #include<bits/stdc++.h>
 2 typedef long long LL;
 3 using namespace std;
 4 int t;
 5 LL n;
 6 LL dp[20][3]; // 上一步为0, 
 7 int bit[20];
 8 
 9 
10 LL dfs(int pos,int have,int lim){
11     if(pos<=0) return have==2;
12     if(!lim&&dp[pos][have]!=-1) return dp[pos][have];
13     int num=lim?bit[pos]:9;
14     LL ans=0;
15     for(int i=0;i<=num;i++){
16         int next_h=have;
17         if(have==1&&i!=4) next_h=0;//第一个和第二个的顺序不能搞错,
18         if(have==1&&i==9) next_h=2;//如果i==9放到第一位,就会被后面的i!=4给完全覆盖 
19         if(have==0&&i==4) next_h=1;
20         ans+=dfs(pos-1,next_h,lim&&i==num);
21     }
22     if(!lim) dp[pos][have]=ans;
23     return ans;    
24 }
25 
26 LL solve(LL m){
27     int len=0;
28     while(m>0){
29         bit[++len]=m%10;m=m/10;
30     }
31     return dfs(len,0,1);
32 }
33 
34 int main(){
35     scanf("%d",&t);
36     memset(dp,-1,sizeof(dp));
37     while(t--){
38         scanf("%lld",&n);
39         printf("%lld
",solve(n));
40     }
41     return 0;
42 }
View Code

 

以上是关于Hdu3555---数位dp的主要内容,如果未能解决你的问题,请参考以下文章

HDU 3555Bomb 数位DP

Bomb HDU - 3555 (数位DP)

HDU 3555 数位dp入门

数位DP入门题 hdu 2089 hdu 3555

HDU - 3555 - Bomb(数位DP)

HDU 3555 数位DP