您的位置:首页 > 其它

codeforces 9C 数位DP做法

2017-01-03 22:25 411 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数位dp