hdu 3555 数位dp入门
套模板。。
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll s[22],dp[22][2]; ll dfs(int len,bool lim,bool smax) { if(len==0) return 1; if(!smax&&dp[len][lim]) return dp[len][lim]; ll ans=0,up=(smax?s[len]:9); for(ll i=0;i<=up;i++) { if(i==9&&lim) continue; ans+=dfs(len-1,i==4,smax&&i==up); } return smax ? ans : dp[len][lim] = ans; } ll solve(ll n) { memset(s,0,sizeof(s)); int i=0; while(n) { s[++i]=n%10; n/=10; } return dfs(i,false,true); } int main() { ll T,n; cin>>T; while(T--) { cin>>n; cout<<n-solve(n)+solve(0)<<endl; } return 0; }