数位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. 现代web开发需要学习的15大技术

    现代Web开发需要学习的15大技术 2016-06-08 13:08 快进到现在,我发现现代web开发再一次将发生压倒性的改变.信息资讯的铺天盖地令人迷惑,尤其对于初学者而言.首要原因是新的框架,例如 ...

  2. Pc移植到Mac的技术细节

    1.样式不对: 2.布局不对: 3.Mac的菜单替换PC的菜单: Mac的菜单替换PC的菜单: 1)左上角图标没有手动添加且不需要添加的情况下出现,而且点击是Help菜单内容: 2)把HelpBtn和 ...

  3. iframe底边多出4px或5px解决办法

    问题: 在处理iframe框架自适应时,并且已经去掉iframe的边框,但仍然出现底边多出4px或5px高度的情况.如图 <div id="content"> < ...

  4. mysql 5.7.18 源码安装笔记

    之所以贴出这样一篇笔记呢?主要是因为很久之前,源码安装MySQL的时候,碰到了太多太多的坎坷. 如果你有兴趣进行源码安装,那么请不要以这篇文章为标准,因为每个人的及其环境等其他因素还是差距比较大的. ...

  5. Leetcode 674.最长递增序列

    最长递增序列 给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. 尽管 [1,3 ...

  6. 文件名的查找——find

    查找文件!!! 命令格式:find [PATH] [option] [action] 一.参数1——与时间有关的参数 -atime.-ctime.-mtime -mtime n:在n天之前的“一天之内 ...

  7. 使用IMAGEMAGICK的CONVERT工具批量转换图片格式

    使用IMAGEMAGICK的CONVERT工具批量转换图片格式 http://www.qiansw.com/linux-imagemagick-convert-img.html Home > 文 ...

  8. 在网站中配置MIME类型

    经常会遇到这样的情况,某种类型的文件不能够正常下载,*.7z,自定义的文件类型等,需要在配置文件里配置后才能正常下载. 打开Web.Config文件: <system.webServer> ...

  9. Hibernate常用方法之_修改

    1.使用session的saveOrUpdate方法 public void updateUser(User user){ Session session = null; Transaction tr ...

  10. Win10上部署Apollo配置中心

    基于Docker在Win10上部署Apollo配置中心 https://www.jianshu.com/p/a1215056ce75 http://nobodyiam.com/2016/07/09/i ...