LightOJ 1140 How Many Zeroes?
2015-12-04 21:12
369 查看
题意就是问从n到m之间有多少个0。数位dp枚举每一位dp[i][j]表示到i为有j个0的有多少
#include<stdio.h> #include<string.h> #include<math.h> #include<vector> #include<queue> #include<algorithm> #include<iostream> using namespace std; typedef long long LL; LL dp[22][22]; int dig[20]; LL F(int pos,int num,int q,int f)//q标记是不是有前导0 { if(pos==0)return q?1:num; if(!q&&!f&&dp[pos][num]!=-1) return dp[pos][num]; int End=f?dig[pos]:9; LL ans=0; for(int i=0;i<=End;i++) { if(q) { if(i==0) ans+=F(pos-1,num,q,f&&(i==End)); else ans+=F(pos-1,num,0,f&&(i==End)); } else { if(i==0) ans+=F(pos-1,num+1,0,f&&(i==End)); else ans+=F(pos-1,num,0,f&&(i==End)); } } if(q==0&&f==0) dp[pos][num]=ans; return ans; } LL solve(LL n) { if(n<0) return 0; if(n==0) return 1; int len=0; while(n) { dig[++len]=n%10; n/=10; } return F(len,0,1,1); } int main() { int i,j,t,ca=1; scanf("%d",&t); LL n,m; memset(dp,-1,sizeof(dp)); while(t--) { scanf("%lld%lld",&n,&m); printf("Case %d: %lld\n",ca++,solve(m)-solve(n-1)); } return 0; }
相关文章推荐
- 模板题 codevs 1993 草地排水 想学习的请看链接
- gopush-cluster 架构
- Python实例浅谈之三Python与C/C++相互调用
- Handler源码解析
- 杭电 1003 max sum
- Java中重载和重写的区别
- project euler 32
- 阿里云ECS服务器之tomcat安装,并部署测试war,测试RDS
- IOS OC属性、构造函数、封装、继承、多态
- Jlabel实现内容自动换行
- 图像处理中的数学原理详解17——卷积定理及其证明
- 图——拓扑序列
- 技术人员在转向移动开发过程中有哪些经验和教训值得大家借鉴?
- project euler 31
- javascript 如何定义一个多维数组
- char *s 与 char s[]的区别
- JAVA-计算器
- Leetcode日记(4)---Longest Palindromic Substring
- 往hive中导入数据
- 一个操作系统的实现(2):分段机制