一个正整数的价值就是把这个数的十进制写出来之后,最长的等差子串的长度。

求出在[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)的更多相关文章

  1. BNUOJ 52325 Increasing or Decreasing 数位dp

    传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...

  2. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  3. hdu3555 数位dp

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Subm ...

  4. codeforces Hill Number 数位dp

    http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits: ...

  5. hdu2089 数位dp

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. 【BZOJ-4521】手机号码 数位DP

    4521: [Cqoi2016]手机号码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 303  Solved: 194[Submit][Status ...

  7. 【BZOJ-1026】windy数 数位DP

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5230  Solved: 2353[Submit][Sta ...

  8. 【BZOJ-1833】count数字计数 数位DP

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2494  Solved: 1101[Submit][ ...

  9. 【学习笔记&训练记录】数位DP

    数位DP,即对数位进行拆分,利用数位来转移的一种DP,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...

随机推荐

  1. 190. Reverse Bits -- 按位反转

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  2. 弹出消息对话框ScriptManager

    //直接调用WebMessageBox方法 #region 弹出消息对话框 /// <summary> /// 弹出消息对话框 /// </summary> /// <p ...

  3. js 正则表达式 查找

    <script>var str='<p><img style="width: 140px; height: 105px;" alt="&qu ...

  4. [译]Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架

    第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ...

  5. easyui numberbox不可编辑

    今天又遇到了给easyui中numberbox设置不可编辑的功能,在(http://www.jeasyuicn.com/api/docTtml/index.htm)API中找到了一个方法:

  6. Maven 系列 二 :Maven 常用命令,手动创建第一个 Maven 项目【转】

    1.根据 Maven 的约定,我们在D盘根目录手动创建如下目录及文件结构: 2.打开 pom.xml 文件,添加如下内容: <project xmlns="http://maven.a ...

  7. 原创:整理编辑jQuery全部思维导图【附下载地址】

    主图 全部图已经打包:下载地址 2. 3. 4. 5. 6. 附上一点简单说明 Dom对象和jquer对象之间的转化 如何将一个jquery对象转换为DOM对象? test是一个span元素 var ...

  8. C#语法小用法

    数据在存为数据库之前,用JS的encodeURIComponent进行编码,现需要在后台代码中进行解码,实现decodeURIComponent的功能, 如下: HttpUtility.UrlDeco ...

  9. plsql快速选中一行的快捷键

    实际工作中,经常用到pl/sql,在sql window中,经常性的用到选中一行然后按F8执行这条sql语句.用鼠标选中一行不是特别方便.用快捷键就快多了. 1.使用home键(不是windows键奥 ...

  10. Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。

      <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...