BZOJ 1833: [ZJOI2010]count 数字计数 数位DP,处理前导0
来源:互联网 发布:梅兰商城源码 编辑:程序博客网 时间:2024/05/24 03:35
Description
给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。
Input
输入文件中仅包含一行两个整数a、b,含义如上所述。
Output
输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次。
Sample Input
1 99
Sample Output
9 20 20 20 20 20 20 20 20 20
HINT
30%的数据中,a<=b<=10^6;
100%的数据中,a<=b<=10^12。
解法:数位DP, dp[pos][num][sum]表示前pos位,num已经出现了sum次的次数。然后就是数位DP套板,
注意前导0的情况。
///BZOJ 1833#include <bits/stdc++.h>using namespace std;typedef long long LL;LL dp[20][20][20]; //dp[pos][num][sum]前pos位,num已经出现了sum次LL digit[20];LL dfs(int pos, int num, int sum, bool lead, bool limit){ if(pos==0) return sum; if(!limit&&!lead&&dp[pos][num][sum]!=-1) return dp[pos][num][sum]; int up=limit?digit[pos]:9; LL ans=0; if(!lead||pos==1) ans+=dfs(pos-1, num, sum+(num==0), 0, limit&&digit[pos]==0); else ans+=dfs(pos-1, num, sum, 1, limit&&digit[pos]==0); for(int i=1; i<=up; i++){ ans+=dfs(pos-1, num, sum+(num==i), 0, limit&&digit[pos]==i); } if(!limit&&!lead) dp[pos][num][sum]=ans; return ans;}LL f(LL x, int num){ if(x<0) return 0; if(x==0) return num==0?1:0; int pos=0; while(x){ digit[++pos]=x%10; x/=10; } return dfs(pos,num,0,1,1);}int main(){ LL l, r; memset(dp,-1,sizeof(dp)); scanf("%lld%lld", &l,&r); for(int i=0; i<=8; i++) printf("%lld ", f(r,i)-f(l-1,i)); printf("%lld\n", f(r,9)-f(l-1,9)); return 0;}
0 0
- BZOJ 1833: [ZJOI2010]count 数字计数 数位DP,处理前导0
- BZOJ 1833 ZJOI2010 count 数字计数 数位DP
- BZOJ 1833 [ZJOI2010]count 数字计数(数位dp)
- 【BZOJ 1833】 [ZJOI2010]count 数字计数|数位DP
- bzoj 1833: [ZJOI2010]count 数字计数(数位dp)
- [bzoj 1833] [ZJOI2010]count 数字计数:数位DP
- BZOJ-1833 [ZJOI2010]count 数字计数 数位DP
- bzoj 1833 [ZJOI2010]count 数字计数 数位dp
- 1833: [ZJOI2010]count 数字计数 数位dp
- 【BZOJ】【P1833】【ZJOI2010】【count 数字计数】【题解】【数位DP】
- bzoj1833: [ZJOI2010]count 数字计数 数位dp
- [BZOJ1833] [ZJOI2010]count 数字计数 && 数位DP
- 【bzoj1833】[ZJOI2010]count 数字计数 数位DP
- Bzoj1833:[ZJOI2010]count 数字计数:数位dp
- bzoj1833[ZJOI2010]count 数字计数 数位DP
- 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)
- bzoj 1833 count 数字计数 数位dp
- BZOJ 1833 count 数字计数 数位DP
- maven 工程一些错误的解决办法
- 将Spring与JSF集成
- bash笔记
- 显式Intent与隐式Intent的使用
- C++之模板类问题
- BZOJ 1833: [ZJOI2010]count 数字计数 数位DP,处理前导0
- 算法导论 练习题 13.2-3
- 用户需求和产品发展相互促进的关系初探
- mysql 非空查询
- matlab面向对象教程【2】影讯抓取及其可视化展示(1/5)
- 戴上VR眼镜来场球赛?开启上帝视角
- Android通用标题栏组合控件
- 4.3通过FactoryBean配置bean
- 解决Mysql中删除重复记录的问题