Digit (数位DP)
2015-06-07 18:15
337 查看
一个正整数的价值就是把这个数的十进制写出来之后,最长的等差子串的长度。
求出在[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枚举下一位的数字转移即可
求出在[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=13; var T:longint; a:array[0..maxn] of longint; f:array[0..maxn,0..maxn,0..maxn,-9..9,0..9,0..1,0..1] 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]>0 then exit(f[now,ml,l,d,pre,st,lim]); if now=0 then exit(ml); if lim=1 then mx:=a[now] else mx:=9; sum:=0; for i:=0 to mx do if st=1 then if i=0 then sum:=sum+dfs(now-1,0,0,i-pre,i,1,lim and ord(i=mx)) else sum:=sum+dfs(now-1,max(ml,l+1),l+1,i-pre,i,0,lim and ord(i=mx)) else if i-pre=d then sum:=sum+dfs(now-1,max(ml,l+1),l+1,i-pre,i,0,lim and ord(i=mx)) else sum:=sum+dfs(now-1,max(ml,2),2,i-pre,i,0,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),0); len:=0; while x>0 do begin inc(len); a[len]:=x mod 10; x:=x div 10; end; exit(dfs(len,0,0,0,0,1,1)); end; procedure main; var l,r:int64; begin readln(l,r); writeln(calc(r)-calc(l-1)); end; begin readln(T); while T>0 do begin main; dec(T); end; end.
相关文章推荐
- 乘法口诀 (第一次写博客~~~~)
- 数学之美札记:信息的度量和作用
- Rotate List || LeetCode
- c语言编写贪吃蛇修改后最新版
- 如何让非root用户启用小于1024号的端口
- 投稿
- Redis常用命令
- UVA 12297 Super Poker(矩阵快速幂)
- HTTP POST GET 本质区别详解
- Uva 1584 Circular Sequence
- 将截断字符串或二进制数据。语句已终止
- SSH三种框架及表示层、业务层和持久层的理解
- <深入理解JavaScript>学习笔记(5)_强大的原型和原型链
- Android 仿美团网,大众点评购买框悬浮效果之修改版
- LightOJ1012---Guilty Prince (并查集)
- [模板]素数筛选
- 《自己动手写框架9》:理想的开源框架与设计原则
- c++ --> 构造函数与析构函数
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- 最小生成树Prim算法