数位 dp 模板题……

题目大意

给你两个数 l,rl,rl,r,求出 l,rl,rl,r 之间所有数的数位和。

什么是数位和?

举个栗子,有一个数 123123123,那么他的数位和,即各个数位的和为 6(1+2+3)6(1+2+3)6(1+2+3)。

考虑求数位和,采用数位 dp(不会请移步P4999)。

简单分析一下。

  • 定义状态:

dpi,jdp_{i,j}dpi,j​:以 jjj 作为最高位的 iii 位数的数字和。

性质:以 xxx 作为最高位的 yyy 位数有 10y−110^{y-1}10y−1 个。

  • 求状态转移方程:

dpi,j=(∑dpi−1,0/1/2/3/4/5/6/7/8/9)+j∗10i−1dp_{i,j}=(\sum{dp_{i-1,0/1/2/3/4/5/6/7/8/9}})+j*10^{i-1}dpi,j​=(∑dpi−1,0/1/2/3/4/5/6/7/8/9​)+j∗10i−1

  • 边界条件:

dp0,0=0dp_{0,0}=0dp0,0​=0

那么接下来就是直接上模板了:

#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int mod=1e9+7;
int dp[200][200];
int t;
void init(){
dp[0][0]=0;
for(int i=1;i<=19;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
dp[i][j]+=dp[i-1][k];
}
int sum=1;
for(int k=1;k<=i-1;k++){
sum*=10;
}
dp[i][j]+=j*sum;
}
}
}
int query(int x){
int num[25]={0},ans=0,sum=0,cnt=0;
while(x!=0){
cnt++;
num[cnt]=x%10;
x/=10;
}
for(int i=cnt;i>=1;i--){
for(int j=0;j<=num[i]-1;j++){
ans+=dp[i][j];
int tmp=1;
for(int k=1;k<=i-1;k++){
tmp=tmp*10;
}
ans+=sum*tmp;
}
sum+=num[i];
}
return (ans+sum);
}
signed main(){
init();
while(1){
int l,r;
cin>>l>>r;
if(l==0&&r==0)return 0;
cout<<query(r)-query(l-1)<<endl;
}
return 0;
}
*/

题解:UVA12517 Digit Sum的更多相关文章

  1. 【题解】Digit Tree

    [题解]Digit Tree CodeForces - 716E 呵呵以为是数据结构题然后是淀粉质还行... 题目就是给你一颗有边权的树,问你有多少路径,把路径上的数字顺次写出来,是\(m\)的倍数. ...

  2. (Problem 16)Power digit sum

    215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of th ...

  3. Digit sum (第 44 届 ACM/ICPC 亚洲区域赛(上海)网络赛)进制预处理水题

    131072K   A digit sum S_b(n)Sb​(n) is a sum of the base-bb digits of nn. Such as S_{10}(233) = 2 + 3 ...

  4. [LeetCode 题解]:Path Sum

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given a bi ...

  5. 欧拉工程第56题:Powerful digit sum

    题目链接   Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; im ...

  6. project euler 16:Power digit sum

    >>> sum([int(i) for i in str(2**1000)]) 1366 >>>

  7. LeetCode题解39.Combination Sum

    39. Combination Sum Given a set of candidate numbers (C) (without duplicates) and a target number (T ...

  8. PAT甲题题解-1081. Rational Sum (20)-模拟分数计算

    模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algori ...

  9. 《LeetBook》LeetCode题解(1) : Two Sum[E]——哈希Map的应用

    001.Two Sum[E] Two SumE 题目 思路 1双重循环 2 排序 3 Hashmap 1.题目 Given an array of integers, return indices o ...

  10. Project Euler 20 Factorial digit sum( 大数乘法 )

    题意:求出100!的各位数字和. /************************************************************************* > Fil ...

随机推荐

  1. jconsole配置

    使用jconsole远程监控可执行jar(非Tomcat)运行状况的配置 程序启动参数配置: nohup /data/soft/jdk1.8.0_251/bin/java -Dcom.sun.mana ...

  2. [BZOJ5093] 图的价值 题解

    考虑计算一个点的贡献,最后 \(\times n\) 即为所求. 显然一个点的贡献为 \(\sum\limits_{i=0}^{n-1}\binom{n-1}ii^k2^{\frac{(n-1)(n- ...

  3. MOS管耗散功率的计算

    MOS管的功率,一般是指Maximum Power Dissipation--Pd,最大的耗散功率,具体是指MOS元件的容许损失,可从产品的热阻上求得.当Tc=25度时,通过附加最大容许损耗Pd,则变 ...

  4. 怎么证明二元函数的极限是多少?& 怎么证明二元函数的极限不存在?

    怎么证明二元函数的极限是多少:https://zhaokaifeng.com/16589/ 怎么证明二元函数的极限不存在:https://zhaokaifeng.com/16600/

  5. Docker 镜像存储目录的位置修改教程

    以下是在 Linux 系统中修改 Docker 镜像存储目录位置的一般步骤: 查看当前 Docker 的默认存储目录:使用docker info命令可以查看 Docker 存储驱动程序和默认存储位置, ...

  6. OERV兴趣探索:模拟器移植

      最近看了很多开源项目,主要都集中在模拟器方面,我指的是游戏模拟器比如GameBoy或者PlayStation这一类.现在想玩这系列的游戏可以在手机或者电脑下载相应的模拟器,并且获取对应的ROM文件 ...

  7. AI与.NET技术实操系列(四):使用Semantic Kernel和DeepSeek构建AI应用

    引言 在人工智能技术飞速发展的今天,大型语言模型(Large Language Models, LLMs)已成为智能应用开发的核心驱动力.从智能客服到自动化内容生成,LLMs的应用正在深刻改变我们的工 ...

  8. python os.walk函数

    os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. root 所指的是当前正在遍历的这个文件夹的本身的地址 dirs 是一个 list ,内容是该文件夹中所有的目录的名 ...

  9. V8引擎静态库及其调用方法

    V8引擎静态库下载地址由于包含了x86和x64的debug和release静态库,所以资源较大,需要耐心下载. 案例编译工具:VS2019 v8开头的即为V8引擎静态库(附送其它开源静态库libuv. ...

  10. .NET周刊【3月第2期 2025-03-09】

    国内文章 记一次.NET内存居高不下排查解决与启示 https://www.cnblogs.com/huangsheng/p/18731382 本文讲述了一个ASP.NET Core gRPC服务迁移 ...