count 数字计数 (数位dp)

给定两个正整数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。


题目大概:

题目很精简。

思路:

做一个结构题存储所有的0到9的数的个数,并储存现在位的个数。

每次统计是把现在位的个数储存,并把以前存储的数字的数量一起进行赋值。

这个题主要是统计10位数,麻烦一点。


代码:


#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
int a[22];
 struct DP
{
    ll wei[10],sum;
    DP(){memset(wei,0,sizeof(wei));}
    DP(ll su):sum(su){memset(wei,0,sizeof(wei));}
}dp[20][2],ans[2];

DP sove(int pos,int lead,int limit)
{

    if(pos==-1)return DP(1);
    if(!limit&&~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值