码迷,mamicode.com
首页 > 其他好文 > 详细

[HDU 3555] Bomb

时间:2016-05-11 21:32:41      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

dp[dep][four]表示长度为dep的上一个是否为4的不含子串49的数的个数

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll dp[20][2];
 5 int dig[20];
 6 ll dfs(int dep,int four,int flag){
 7     if(!dep)return 1LL;
 8     if(!flag&&dp[dep][four]!=-1)return dp[dep][four];
 9     int lim=flag?dig[dep]:9;
10     ll ans=0;
11     for(int i=0;i<=lim;i++){
12         if(four&&i==9)continue;
13         ans+=dfs(dep-1,i==4?1:0,flag&(i==lim));
14     }
15     if(!flag)dp[dep][four]=ans;
16     return ans;
17 }
18 ll solve(ll x){
19     int dd=0;
20     while(x)dig[++dd]=x%10,x/=10;
21     return dfs(dd,0,1);
22 }
23 int main(){
24     memset(dp,-1,sizeof(dp));
25     int T;
26     scanf("%d",&T);
27     while(T--){
28         ll A;
29         scanf("%lld",&A);
30         printf("%lld\n",A-solve(A)+1);
31     }
32     return 0;
33 }
View Code

 

[HDU 3555] Bomb

标签:

原文地址:http://www.cnblogs.com/Ngshily/p/5483331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!