RT,想用数位DP做,但是连样例都过不了,不知道哪里有问题
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,l,num[20],dp[20][20];
ll dfs(int x,int sum,int limit,int one){
if(!x)return sum;
if(!limit&&dp[x][sum]!=-1)return dp[x][sum];
int maxc=limit?num[x]:9;ll ret=0;
for(int i=0;i<=maxc;i++)ret+=dfs(x-1,sum+(one&&i==1),limit&&i==maxc,one&&i==1);
if(!limit)dp[x][sum]=ret;
return ret;
}int main(){
memset(dp,-1,sizeof dp);
cin>>n;
while(n)num[++l]=n%10,n/=10;
cout<<dfs(l,0,1,1);
return 0;
}