51nod数字1的数量
2017-06-19 19:04
190 查看
这道题瞎jbyy了很久 方法可能很奇怪...
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define LL long long using namespace std; int n,ans; int f[35][10],w[11]; void init(){ w[1]=1; for(int i=2;i<=10;i++) w[i]=w[i-1]*10; f[1][1]=1; for(int i=2;i<=10;i++) for(int j=0;j<=9;j++){ for(int k=0;k<=9;k++)f[i][j]+=f[i-1][k]; if(j==1) f[i][j]+=w[i]; } //for(int i=1;i<=10;i++,printf("\n")) for(int j=0;j<=9;j++) printf("%d ",f[i][j]); } int main() { init(); int sum=10,ans=0,v,k,tot=2; scanf("%d",&n); k=n; while(w[sum]>n) sum--; int now=n/w[sum]; for(int i=0;i<now;i++) ans+=f[sum][i]; n=n%w[sum]; for(int i=sum-1;i;i--){ v=n/w[i]; for(int j=0;j<v;j++) ans+=f[i][j]; n=n%w[i]; } v=k; if(k%10==1) ans++; v=v/10; while(tot<=sum){ if(v%10==1) ans=ans+k%w[tot]+1; tot++; v=v/10; } printf("%d\n",ans); return 0; }View Code
相关文章推荐
- 【51Nod】1042 - 数字0-9的数量(数位dp & 递归)
- 51nod 1009 数字1的数量
- 51nod 1009 数字1的数量
- 51Nod 1009 数字1的数量 (数学
- 51NOD 1009 数字1的数量
- [类欧几里得算法 数学技巧] 51Nod 1132 覆盖数字的数量 V2 & Ural 1797 Summit Online Judge. Version 2
- 51nod 1042数字0-9的数量
- 51nod-1042 数字0-9的数量
- 51Nod 数字0到9的数量 (数位DP)
- 51Nod - 1009 数字1的数量(骚套路)
- 数位dp 总结 51nod数字1的数量 数字0-9的数量
- 51nod 1009 数字1的数量
- 51Nod 1042 数字0-9的数量 (数位DP
- 51nod 1009 数字1的数量(思维)
- 51Nod 1009-数字 1 的数量
- 51nod 1009 数字1的数量
- 【51Nod】1009 - 数字1的数量(思维,好题)
- 51nod 1009 数字1的数量
- 51nod 1009 数字1的数量
- 51nod 1009 数字1的数量