题解:UVA12517 Digit Sum
数位 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的更多相关文章
- 【题解】Digit Tree
[题解]Digit Tree CodeForces - 716E 呵呵以为是数据结构题然后是淀粉质还行... 题目就是给你一颗有边权的树,问你有多少路径,把路径上的数字顺次写出来,是\(m\)的倍数. ...
- (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 ...
- 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 ...
- [LeetCode 题解]:Path Sum
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a bi ...
- 欧拉工程第56题:Powerful digit sum
题目链接 Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; im ...
- project euler 16:Power digit sum
>>> sum([int(i) for i in str(2**1000)]) 1366 >>>
- LeetCode题解39.Combination Sum
39. Combination Sum Given a set of candidate numbers (C) (without duplicates) and a target number (T ...
- PAT甲题题解-1081. Rational Sum (20)-模拟分数计算
模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algori ...
- 《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 ...
- Project Euler 20 Factorial digit sum( 大数乘法 )
题意:求出100!的各位数字和. /************************************************************************* > Fil ...
随机推荐
- jconsole配置
使用jconsole远程监控可执行jar(非Tomcat)运行状况的配置 程序启动参数配置: nohup /data/soft/jdk1.8.0_251/bin/java -Dcom.sun.mana ...
- [BZOJ5093] 图的价值 题解
考虑计算一个点的贡献,最后 \(\times n\) 即为所求. 显然一个点的贡献为 \(\sum\limits_{i=0}^{n-1}\binom{n-1}ii^k2^{\frac{(n-1)(n- ...
- MOS管耗散功率的计算
MOS管的功率,一般是指Maximum Power Dissipation--Pd,最大的耗散功率,具体是指MOS元件的容许损失,可从产品的热阻上求得.当Tc=25度时,通过附加最大容许损耗Pd,则变 ...
- 怎么证明二元函数的极限是多少?& 怎么证明二元函数的极限不存在?
怎么证明二元函数的极限是多少:https://zhaokaifeng.com/16589/ 怎么证明二元函数的极限不存在:https://zhaokaifeng.com/16600/
- Docker 镜像存储目录的位置修改教程
以下是在 Linux 系统中修改 Docker 镜像存储目录位置的一般步骤: 查看当前 Docker 的默认存储目录:使用docker info命令可以查看 Docker 存储驱动程序和默认存储位置, ...
- OERV兴趣探索:模拟器移植
最近看了很多开源项目,主要都集中在模拟器方面,我指的是游戏模拟器比如GameBoy或者PlayStation这一类.现在想玩这系列的游戏可以在手机或者电脑下载相应的模拟器,并且获取对应的ROM文件 ...
- AI与.NET技术实操系列(四):使用Semantic Kernel和DeepSeek构建AI应用
引言 在人工智能技术飞速发展的今天,大型语言模型(Large Language Models, LLMs)已成为智能应用开发的核心驱动力.从智能客服到自动化内容生成,LLMs的应用正在深刻改变我们的工 ...
- python os.walk函数
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. root 所指的是当前正在遍历的这个文件夹的本身的地址 dirs 是一个 list ,内容是该文件夹中所有的目录的名 ...
- V8引擎静态库及其调用方法
V8引擎静态库下载地址由于包含了x86和x64的debug和release静态库,所以资源较大,需要耐心下载. 案例编译工具:VS2019 v8开头的即为V8引擎静态库(附送其它开源静态库libuv. ...
- .NET周刊【3月第2期 2025-03-09】
国内文章 记一次.NET内存居高不下排查解决与启示 https://www.cnblogs.com/huangsheng/p/18731382 本文讲述了一个ASP.NET Core gRPC服务迁移 ...