您的位置:首页 > 其它

HDU 3555 Bomb

2016-12-22 15:56 183 查看
RT.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long t,n,bit[22],ret=0,dp[22][10][2];
void get_bit(long long x)
{
ret=0;
while (x) {bit[++ret]=x%10;x/=10;}
}
long long dfs(long long pos,long long pre,bool flag1,long long flag2)
{
if (!pos) return flag1;
if ((!flag2) && (~dp[pos][pre][flag1])) return dp[pos][pre][flag1];
long long ans=0,up=flag2?bit[pos]:9;
for (long long i=0;i<=up;i++)
ans+=dfs(pos-1,i,flag1|((pre==4) && (i==9)),flag2&&i==up);
if (!flag2) dp[pos][pre][flag1]=ans;
return ans;
}
int main()
{
memset(dp,-1,sizeof(dp));
scanf("%lld",&t);
for (long long i=1;i<=t;i++)
{
scanf("%lld",&n);
get_bit(n);printf("%lld\n",dfs(ret,0,0,1));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: