题解: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 ...
随机推荐
- LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中)
大家好,我是忍者程序员.上一篇文章我们讨论了如何科学地刷题,今天我要带大家深入了解这100道精选题目背后的分类逻辑.作为一名面试官,我希望通过这篇文章,为大家绘制一张完整的算法知识地图. 为什么要按类 ...
- Transaction rolled back because it has been marked as rollback-only问题解决
1.背景 在我们的日常开发中,经常会存在在一个Service层中调用另外一个Service层的方法.比如:我们有一个TaskService,里面有一个execTask方法,且这个方法存在事务,这个方法 ...
- Q:在PostgreSQL中跟踪和分析查询日志
在PostgreSQL中,跟踪和分析查询日志是排查性能瓶颈的重要步骤. 通过查看和分析查询日志,我们可以了解哪些查询在执行时遇到了问题,例如执行时间过长.资源消耗过大等. 以下是一些建议和步骤,帮助你 ...
- Flink基础Source配置
一.pom文件 https://www.cnblogs.com/robots2/p/16048648.html 二.代码demo FlinkBaseSource.java package net.xd ...
- dp 常见套路总结
dp 里存的东西值域不大的时候,考虑把状态中某一维和 dp 里存的东西交换,进行 dp. 连续段 dp 时,考虑把连续段化为对每个元素考虑接上一个元素. dp 里的值可能存在某个上界,超过这个值一定不 ...
- 用python做时间序列预测四:*稳/非*稳时间序列
上篇文章简单提到了应该用*稳时间序列做预测,本文将介绍具体概念和原因. Stationary Series *稳序列 *稳序列有三个基本标准: 1.序列的均值(mean)不应该是时间的函数(意思是不应 ...
- svn提示Node remains in conflict的解决办法
svn 更新提示Node remains in conflict 这个时候不管svn up多少次,都无法更新到最新的内容 解决办法: svn revert --depth=infinity * 其中* ...
- jQuery ajax 文件上传 Request Headers 缺少 boundary
原文地址: https://blog.jijian.link/2020-07-28/jquery-ajax-upload-file/ 一般上传方式 const file = document.getE ...
- Java的volatile和sychronized底层实现
1. 概览 从Java代码级别到硬件级别各层都是如何实现的 2. Synchronized 2.1 字节码层面 使用javap -verbose <class文件>可以查看到字节码信息,其 ...
- zookeeper windows 安装
下载 zookeeper 下载地址为: https://zookeeper.apache.org/releases.html. 选择一个地址点击版本下载: 配置 下载后解压到指定磁盘的 zookeep ...