-
D - Bomb
- HDU - 3555
-
#include <iostream> using namespace std; #define ll long long ll dp[20][2],digit[20],t,n; ll dfs(int len,bool if4,bool limit) { if(len==0)return 1; if(!limit&&dp[len][if4]) return dp[len][if4]; ll cnt=0,upbound=(limit?digit[len]:9); for(int i=0; i<=upbound; i++) { if(if4&&i==9) continue; cnt+=dfs(len-1, i==4,limit&&i==upbound); } if(!limit) dp[len][if4]=cnt; return cnt; } ll solve(ll num) { int k=0; while(num) { digit[++k]=num%10; num/=10; } return dfs(k,false,true); } int main() { ios::sync_with_stdio(false); cin>>t; while(t--) { cin>>n; cout<<n+1-solve(n)<<endl; } return 0; }
D - Bomb -上界数位DP模板
最新推荐文章于 2019-07-09 21:45:58 发布