#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
int dp[12][12];
int main(){
dp[1][1] = 1;
dp[1][0] = 1;
for(int i = 2;i <= 10;++i){
for(int j = 0;j <= 1;++j){
for(int k = 0;k <= 1;++k){
dp[i][j] += dp[i-1][k];
}
}
}
ll n;
while(scanf("%I64d",&n) != EOF){
int a[12],len = 0;
n++;
while(n > 0){
a[++len] = n%10;
n /= 10;
}
int ans = 0;
for(int i = len;i >= 1;--i){
for(int j = 0;j <= 9;++j){
if(j < a[i]){
ans += dp[i][j];
}
}
if(a[i] > 1) break;
}
printf("%d\n",ans-1);
}
return 0;
}
codeforces 9C 数位DP做法
最新推荐文章于 2022-08-29 19:55:25 发布