数字的游戏(数位dp)

简介: 数字的游戏(数位dp)
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int f[N][10];
int l,r;
void init()
{
    for(int i=0;i<=9;i++) f[1][i]=1;
    for(int i=2;i<=N;i++)
    {
        for(int j=0;j<=9;j++)
        for(int k=j;k<=9;k++)
        f[i][j]+=f[i-1][k];
    }
}
int cal(int n)
{
    if(!n) return 1;
    vector<int>num;
    while(n) num.push_back(n%10),n/=10;
    int last=0;
    int res=0;
    for(int i=num.size()-1;i>=0;i--)
    {
        int x=num[i];
        if(x<last) break;
        for(int j=last;j<x;j++)
        {
            res+=f[i+1][j];
        }
        last=x;
        if(!i) res++;
    }
    return res;
}
int main()
{
    init();
    while(~scanf("%d%d",&l,&r))
    {
        cout<<cal(r)-cal(l-1)<<"\n";
    }
    return 0;
}
目录
相关文章
|
6月前
|
C++
【洛谷 P1307】[NOIP2011 普及组] 数字反转 题解(字符串)
**NOIP2011普及组题目:给定整数N,反转其位得到新数。新数首位非0(除非N=0)。输入0时直接输出0,其他情况输出反转后的数,考虑负数及前导0。提供的C++代码实现通过读入字符串,反转数字顺序并处理符号和前导0。**
36 0
|
6月前
【洛谷 P1307】[NOIP2011 普及组] 数字反转 题解(取余)
NOIP2011普及组试题,要求反转整数N的位得到新数,保持正负号和非零最高位。输入一个整数N,输出反转后的新数。样例输入1:123,输出:321;样例输入2:-380,输出:-83。代码使用取余法实现,处理负数时保留符号。
56 0
|
6月前
|
C++
【洛谷 P1075】[NOIP2012 普及组] 质因数分解 题解(判断质数)
NOIP2012普及组题目,给定合数$n$由两个不同质数乘积组成,求较大质数。输入一个正整数$n$,输出较大质因子。例如输入21,输出7。代码使用C++,通过循环和质数判断找到能整除$n$的质数,再求另一个质数,并输出较大者。
82 0
|
6月前
【洛谷 P2669】[NOIP2015 普及组] 金币 题解(循环)
`NOIP2015`普及组题目,骑士按周期领金币:第一天1枚,随后$n$天每天$n$枚,然后$n+1$天每天$n+1$枚。给定天数$k$,求总金币数。输入$k$,输出金币总数。样例输入6,输出14;输入1000,输出29820。代码使用循环和变量控制周期,累计金币数。
123 0
|
6月前
【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
**NOIP2002普及组题目:求级数$S_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}$超过$k$的最小$n$。给定$1\leq k\leq 15$,输出满足$S_n&gt;k$的$n$。输入$1$个整数$k$,输出相应$n$。例如,输入$1$,输出$2$。代码中使用double确保精度,通过累加求和判断条件找到$n$。**
45 0
|
7月前
每日一题来噜!(记负均正,旋转数组中的最小数字)
每日一题来噜!(记负均正,旋转数组中的最小数字)
34 1
|
算法
算法:数字涂色
算法:数字涂色
倒置字符串、猜名次、猜凶手、杨辉三角(下)
倒置字符串、猜名次、猜凶手、杨辉三角(下)
倒置字符串、猜名次、猜凶手、杨辉三角(上)
倒置字符串、猜名次、猜凶手、杨辉三角(上)
剑指offer 45. 数字序列中某一位的数字
剑指offer 45. 数字序列中某一位的数字
61 0