Digit (数位DP)
一个正整数的价值就是把这个数的十进制写出来之后,最长的等差子串的长度。
求出在[l,r]范围内的数字的价值总和。
(l<=r<=10^12)
记f[now,ml,l,d,pre,st,lim] 为当前状态下ans的值
now 第now位
ml 所求的的等差数列最长长度
l 当前所求等差数列的长度
d 公差为d
st 有无前导0
pre 上一位是多少
lim 是否达到数字上限
直接dfs枚举下一位的数字转移即可
const maxn=;
var T:longint;
a:array[..maxn] of longint;
f:array[..maxn,..maxn,..maxn,-..,..,..,..] of int64;
function max(a,b:longint):longint; inline;
begin
if a>b then exit(a) else exit(b);
end;
function dfs(now,ml,l,d,pre,st,lim:longint):int64;
var mx,i:longint; sum:int64;
begin
//now 第now位
//ml 最长长度
//l 当前长度
//d 公差为d
//st 有无前导0
//pre 上一位是多少
//lim 是否达到上限
if f[now,ml,l,d,pre,st,lim]> then exit(f[now,ml,l,d,pre,st,lim]);
if now= then exit(ml);
if lim= then mx:=a[now] else mx:=;
sum:=;
for i:= to mx do
if st= then
if i= then
sum:=sum+dfs(now-,,,i-pre,i,,lim and ord(i=mx))
else
sum:=sum+dfs(now-,max(ml,l+),l+,i-pre,i,,lim and ord(i=mx))
else
if i-pre=d then
sum:=sum+dfs(now-,max(ml,l+),l+,i-pre,i,,lim and ord(i=mx))
else
sum:=sum+dfs(now-,max(ml,),,i-pre,i,,lim and ord(i=mx));
f[now,ml,l,d,pre,st,lim]:=sum;
exit(sum);
end;
function calc(x:int64):int64;
var len:longint;
begin
fillchar(f,sizeof(f),);
len:=;
while x> do
begin
inc(len);
a[len]:=x mod ;
x:=x div ;
end;
exit(dfs(len,,,,,,));
end;
procedure main;
var l,r:int64;
begin
readln(l,r);
writeln(calc(r)-calc(l-));
end;
begin
readln(T);
while T> do begin main; dec(T); end; end.
Digit (数位DP)的更多相关文章
- BNUOJ 52325 Increasing or Decreasing 数位dp
传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...
- hdu 5898 odd-even number 数位DP
传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...
- hdu3555 数位dp
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Subm ...
- codeforces Hill Number 数位dp
http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits: 5000 MS Memory Limits: ...
- hdu2089 数位dp
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 【BZOJ-4521】手机号码 数位DP
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 303 Solved: 194[Submit][Status ...
- 【BZOJ-1026】windy数 数位DP
1026: [SCOI2009]windy数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5230 Solved: 2353[Submit][Sta ...
- 【BZOJ-1833】count数字计数 数位DP
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2494 Solved: 1101[Submit][ ...
- 【学习笔记&训练记录】数位DP
数位DP,即对数位进行拆分,利用数位来转移的一种DP,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...
随机推荐
- 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>
原因 一,类型错误: 比如xml本来是UserInfo类型 用XmlSerializer进行反序列化传入的类型是MemberInfo这就会报错 二,xml根节点和对象的类名不一致,而又没有对类加入[X ...
- input file类型,文件类型的限制
直接限制input type='file'的文件类型限制,通过accept属性进行设定,多个类型用逗号分隔开,因为accept是html5的新特性,所以火狐和IE的支持就显得单薄了, 如:
- 为 Node.js 开发者准备的 8 本免费在线电子书(转)
ode.js 是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设你是在POSIX环境下运行它 Linux 或 Mac OS X.如果你 ...
- 简单管理用户SESSION小记(个人观点,欢迎斧正)
做了几年码农,记录下一般涉及到用户session管理的方法. 问题说明: a.用户如果点击退出时,可以获取用户动作,这样可以销毁session. b.用户直接关闭浏览器或者直接意外关机情况,无法获取用 ...
- [转]z-order引出的问题
在窗口与窗口之间毫无重叠的情况下,根本不需要关心z-order.然而,当窗口之间出现重叠时,系统就需要通过一个标准来确定窗口的显示顺序.这个标准就是z-order.存在多个因素影响一个窗口的z-ord ...
- Servlet+JSP+JavaBean开发模式(MVC)介绍
好伤心...写登陆注册之前看见一篇很好的博文,没有收藏,然后找不到了. 前几天在知乎上看见一个问题,什么时候感觉最无力. 前两天一直想回答:尝试过google到的所有solve case,结果bug依 ...
- Ubuntu用户相关基本命令
Linux是一个用户权限管理得很严格的系统,Ubuntu作为最受欢迎的桌面发行版,提供了简单易用的图形界面工具来管理用户,但是命令行工具往往更强大,用得熟练的话效率会更高.用户管理命令常用的有如下几个 ...
- 使用ContentObserve监听用户发出的短信
import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.app.Activit ...
- [JS]getYear()和getFullYear()方法区别
getFullYear();总是返回4位完整的年份 getYear();当年份在1900-1999时,返回两位数字,如1980返回80,当不在这个范围时,返回同getFullYear(); 注:get ...
- cordova 5.0 白名单
最新的cordova 5.0 更新了白名单机制,增强了安全性,但是也给我们在开发中带来了很多问题: 当你引入谷歌.百度地图时,会出现 Failed to load resource -- 解决办法: ...