数位dp一般应用于:

求出在给定区间[A,B]内,符合条件P(i)的数i的个数

条件P(i)一般与数的大小无关,而与 数的组成 有关

例题是一道BZOJ1833,让求出区间所有整数每个数字出现的次数

递推出f[i][j][k]表示长度为i开头j的所有数字中k的个数

这个东西让我想起了大模拟,高精度

 #include<cstdio>
using namespace std;
//a,b 10^12
long long a,b;
long long t[];
struct Data{long long a[];}f[][];
Data operator +(Data a,Data b)
{
Data t;
for(int k=;k<=;k++)
t.a[k]=a.a[k]+b.a[k];
return t;
}
inline long long read()
{
long long x=,f=;char ch=getchar();
while(ch<''||ch>'') {if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='') {x=x*+ch-'';ch=getchar();}
return x*f;
}
Data cal(long long x)
{
Data ans;for(int i=;i<=;i++) ans.a[i]=;
if(x==)
{
ans.a[]=;
return ans;
}
int len=;
while(t[len]>x) len--;
for(int i=;i<len;i++)
for(int j=;j<=;j++)
ans=ans+f[i][j];
ans.a[]++;
int cur=x/t[len];
for(int i=;i<cur;i++) ans=ans+f[len][i];
x%=t[len];
ans.a[cur]+=x+;
for(int i=len-;i;i--)
{
cur=x/t[i];
for(int j=;j<cur;j++)
ans=ans+f[i][j];
x%=t[i];
ans.a[cur]+=x+;
}
return ans;
}
int main()
{
t[]=;
for(int i=;i<=;i++) t[i]=t[i-]*;
for(int i=;i<=;i++) f[][i].a[i]=;
//初始化
//递推出f[i][j][k]表示长度为i开头j的所有数字中k的个数
for(int i=;i<=;i++) //数字长度
for(int x=;x<=;x++)
for(int y=;y<=;y++)
{
f[i][y]=f[i][y]+f[i-][x];
f[i][y].a[y]+=t[i-];
}
a=read();b=read();
Data t1=cal(b),t2=cal(a-);
for(int i=;i<=;i++)
{
printf("%lld",t1.a[i]-t2.a[i]);
if(i!=) printf(" ");
}
return ;
}

cal函数就是计算从0到当前数中每一个数字出现的次数,对a和b分别求然后作差就好了

挺恶心的一种dp

动态规划:数位DP的更多相关文章

  1. 动态规划——数位dp

    通过先前在<动态规划——背包问题>中关于动态规划的初探,我们其实可以看到,动态规划其实不是像凸包.扩展欧几里得等是具体的算法,而是一种在解决问题中决策的思想.在不同的题目中,我们都需要根据 ...

  2. 模板 - 动态规划 - 数位dp

    #include<bits/stdc++.h> using namespace std; #define ll long long ]; ll dp[][/*可能需要的状态2*/];//不 ...

  3. 动态规划-数位dp

    大佬讲的清楚 [https://blog.csdn.net/wust_zzwh/article/details/52100392] 例子 不要62或4 l到r有多少个数不含62或者4 代码 #incl ...

  4. 有关动态规划(主要是数位DP)的一点讨论

    动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家在研究多阶段决策过程的优化问题时, ...

  5. 动态规划晋级——HDU 3555 Bomb【数位DP详解】

    转载请注明出处:http://blog.csdn.net/a1dark 分析:初学数位DP完全搞不懂.很多时候都是自己花大量时间去找规律.记得上次网络赛有道数位DP.硬是找规律给A了.那时候完全不知数 ...

  6. 动态规划专题(三)——数位DP

    前言 数位\(DP\) 真的是最恶心的\(DP\). 简介 看到那种给你两个数,让你求这两个数之间符合条件的数的个数,且这两个数非常大,这样的题目一般就是 数位\(DP\) 题. 数位\(DP\)一般 ...

  7. 「动态规划」-数位dp专题

    数位dp,今天学长讲的稍玄学,课下花了一会时间仔细看了一下,发现板子是挺好理解的,就在这里写一些: 数位dp主要就是搞一些在区间中,区间内的数满足题目中的条件的数的个数的一类题,题目一般都好理解,这时 ...

  8. P4317 花神的数论题 动态规划?数位DP

    思路:数位$DP$ 提交:5次(其实之前A过,但是调了调当初的程序.本次是2次AC的) 题解: 我们分别求出$sum(x)=i$,对于一个$i$,有几个$x$,然后我们就可以快速幂解决. 至于求个数用 ...

  9. 数位dp/记忆化搜索

    一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an  ...

随机推荐

  1. Python全栈面试题

    Mr.Seven   博客园 首页 新随笔 联系 订阅 管理 随笔-132  文章-153  评论-516  不吹不擂,你想要的Python面试都在这里了[315+道题]   写在前面 近日恰逢学生毕 ...

  2. Office使用技巧(不断补充)

    1.word中,第一行后面有很多空格,但把第二行的退到第一行来就删了第一行的字,为什么? 解决办法:应该是下一行开头部分是一个不可拆分的整体,上一行末尾放不下,只能放在下一行.处理方法:格式--段落- ...

  3. 用起来超爽的Maven——入门篇

    你还在为怎样寻找.导入SSH相关依赖包纠结吗? 你还在为没有安装IDE开发工具不能编译.部署.运行项目而纠结吗? 你还在为公司项目目录结构怎样规范而纠结吗? 亲爱的纠结哥,只要你使用了Maven,一切 ...

  4. IOException: win32 io returned 267. Path:

    unity3d在导出android项目时出现了这个错误,找了一圈也没找到原因,最后把项目名中空格去掉后OK了,坑啊!!!!

  5. Linux-Ps命令使用

    ps -ef | grep java ps aux | grep java ps aux 是用BSD的格式来显示Java进程 显示的项目有: USER        PID %CPU %MEM    ...

  6. CentOs 版本名字说明

    What images are in this directory CentOS-6.3-x86_64-netinstall.iso This is the network install and r ...

  7. cut 与 awk

    cut和awk都能分割显示需要的内容 但在需要以空格为分隔符的情况下: # free -m|grep Mem Mem: cut是以单一空格为分隔符的: # free -m|grep Mem|cut - ...

  8. LeetCode 61——旋转链表

    1. 题目 2. 解答 2.1. 方法一 将链表每个节点向右移动 1 个位置,其实就是让链表最后一个结点指向第一个结点. 因此,向右移动 k 个位置就重复上述过程 k 次即可. 然后,我们注意到,若链 ...

  9. HDU 4433 locker(DP)(2012 Asia Tianjin Regional Contest)

    Problem Description A password locker with N digits, each digit can be rotated to 0-9 circularly.You ...

  10. await和async再学习

    await太不容易理解了,自己常常迷惑,不知道该怎么用. 文章:探索c#之Async.Await剖析 这篇文章,有一个很清晰的描述: 使用Async标记方法Async1为异步方法,用Await标记Ge ...