您的位置:首页 > 其它

[HDU 3555] Bomb

2016-05-11 19:45 316 查看
dp[dep][four]表示长度为dep的上一个是否为4的不含子串49的数的个数

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[20][2];
int dig[20];
ll dfs(int dep,int four,int flag){
if(!dep)return 1LL;
if(!flag&&dp[dep][four]!=-1)return dp[dep][four];
int lim=flag?dig[dep]:9;
ll ans=0;
for(int i=0;i<=lim;i++){
if(four&&i==9)continue;
ans+=dfs(dep-1,i==4?1:0,flag&(i==lim));
}
if(!flag)dp[dep][four]=ans;
return ans;
}
ll solve(ll x){
int dd=0;
while(x)dig[++dd]=x%10,x/=10;
return dfs(dd,0,1);
}
int main(){
memset(dp,-1,sizeof(dp));
int T;
scanf("%d",&T);
while(T--){
ll A;
scanf("%lld",&A);
printf("%lld\n",A-solve(A)+1);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: