bzoj1799同类分布——数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1799
数位DP。
1、循环方法
预处理出每个位数上,和为某个数,模某个数余某个数的所有情况;
因为开四维会爆空间,所以省去模数,为此需要固定模数一次一次累加;
余数的转移,以及可以填数的范围都值得注意。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll l,r,mul[],f[][][],ans,sx;
int a[][],w[];
void cl(int t,ll tmp)
{
while(tmp)
{
a[t][++w[t]]=tmp%;
tmp/=;
}
}
void pw()
{
mul[]=;
for(int i=;i<w[];i++)//<
mul[i]=mul[i-]*;
}
void pre(int s)
{
memset(f,,sizeof f);
f[][][]=;
ll lm=;
for(int i=;i<w[];i++)//<
{
lm=min(s,i*);
for(int j=;j<=lm;j++)
for(int l=;l<s;l++)
for(int p=;p<=&&j-p>=;p++)
// f[i][j][l]+=f[i-1][j-p][((s-(l-p*mul[i-1]))%s+s)%s];
f[i][j][l]+=f[i-][j-p][((l-p*mul[i-])%s+s)%s];
}
}
ll cal(int t,int s)
{
ll cnt=,lj=;
int ss=;
for(int i=w[t];i;i--)
{
int lm=a[t][i];
if(i==)lm++;
for(int p=;p<lm&&s-ss-p>=;p++)
cnt+=f[i-][s-ss-p][(s-(lj+p*mul[i-])%s)%s];//
ss+=a[t][i];lj+=a[t][i]*mul[i-];
}
return cnt;
}
int main()
{
scanf("%lld%lld",&l,&r);
cl(,l-);cl(,r);
pw();
sx=(w[]-)*+a[][w[]];
for(int s=;s<=sx;s++)
{
pre(s);
ans+=cal(,s)-cal(,s);
}
printf("%lld",ans);
return ;
}
2、递归方法
记忆化,代码极简单,详见注释。
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int a[],mod,cnt,tot;
ll f[][][][],vis[][][][],x,y;//tot时间戳
ll dp(int p,int d,int s,int v)//p为有无限制,d为第几位,s为位数和,v为模余数
{
if(!d)return (!s&&!v);//边界
if(vis[p][d][s][v]==tot)return f[p][d][s][v];//记忆化
vis[p][d][s][v]=tot;
ll l=max(,s-(d-)*),r=min(s,((p)?a[d]:));//
ll cnt=;
for(int i=l;i<=r;i++)
cnt+=dp((p&(i==a[d])),d-,s-i,(*v+i)%mod);//%mod而非%s
return f[p][d][s][v]=cnt;
}
ll solve(ll x)
{
for(cnt=;x;x/=)a[++cnt]=x%;
ll tmp=;
for(mod=;mod<=cnt*;mod++)//cnt*9而非a[cnt]*9
tot++,tmp+=dp(,cnt,mod,);//一开始就有限制
return tmp;
}
int main()
{
scanf("%lld%lld",&x,&y);
printf("%lld",solve(y)-solve(x-));
return ;
}
bzoj1799同类分布——数位DP的更多相关文章
- [BZOJ1799][AHOI2009]同类分布(数位DP)
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MBSubmit: 1635 Solved: 728[Submit][S ...
- BZOJ1799 self 同类分布 数位dp
BZOJ1799self 同类分布 去博客园看该题解 题意 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. [约束条件]1 ≤ a ≤ b ≤ 10^18 题解 1.所有的位数之和&l ...
- BZOJ1799 [Ahoi2009]self 同类分布[数位DP]
求出[a,b]中各位数字之和能整除原数的数的个数. 有困难的一道题.被迫看了题解:枚举每一个各位数字的和($<=162$),设计状态$f[len][sum][rest]$表示dp后面$len$位 ...
- bzoj 1799: [Ahoi2009]self 同类分布 数位dp
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Descripti ...
- BZOJ 1799 同类分布(数位DP)
给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数.1<=a<=b<=1e18. 注意到各位数字之和最大是153.考虑枚举这个东西.那么需要统计的是[0,a-1]和[0,b ...
- [luogu4127 AHOI2009] 同类分布 (数位dp)
传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...
- 数位dp 笔记
目录 数位dp 笔记 解决的问题 & 主体思想 入门 -- windy数 绕一个弯 -- 萌数 the end? -- 恨7不成妻 小心细节 [SDOI2016]储能表 复杂度起飞 [AHOI ...
- [BZOJ1799][Ahoi2009]self 同类分布(数位dp)
题目描述 给出两个数 a,ba,b ,求出 [a,b][a,b] 中各位数字之和能整除原数的数的个数. 输入输出格式 输入格式: 一行,两个整数 aa 和 bb 输出格式: 一个整数,表示答案 输入输 ...
- 【数位dp】bzoj1799: [Ahoi2009]self 同类分布
各种奇怪姿势的数位dp Description 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. Sample Input 10 19 Sample Output 3 HINT [约束条 ...
随机推荐
- HttpClient通过Post方式发送Json数据
服务器用的是Springmvc,接口内容: @ResponseBody @RequestMapping(value="/order",method=RequestMethod.PO ...
- CSDN站点系统升级公告
各位尊敬的CSDN用户: 你们好. CSDN站点将于2015年12月17日23时-12月18日08时进行系统升级维护,升级维护期间,CSDN站点将会受到影响.可能会导致博客.下载频道及站点其它功能无法 ...
- 合并SO为单独交货单
本场景为单步交货 为客户建立专用的route. 增加一个pull rule 在做订单的时候,为订单行选择 上面建立好的route, 连续建立了 2个 订单 SO ...
- 如何去掉Google搜索的跳转 让你的Google搜索不被reset掉
http://www.nowamagic.net/librarys/veda/detail/389 在点击google搜索结果时,google会在结果的URL前做个跳转,且有时这个跳转地址会被墙,这样 ...
- 不能hadoop-daemon.sh start datanode, 显示 错误: 找不到或无法加载主类 ”-Djava.library.path=.home.hadoop.apps.hadoop-2.6.4.lib”
这两行代码是用来解决一个Hadoop,32位和64位不兼容的警告的,(这个警告可以忽略) 这两行加到mini2~min4后, export HADOOP_COMMON_LIB_NATIVE_DIR=$ ...
- Linux 下装mysql[Ubuntu & CentOS]
Ubuntu: https://blog.csdn.net/hipilee/article/details/77610916
- XML(四)dom4j解析XML
使用dom4j须要导入jar包 jar包下载地址:http://pan.baidu.com/s/1o65jWRw 将dom4j-1.6.1.jar包导入Eclipse book2.xml <?x ...
- MacBook Pro使用初体验之Mac快捷键汇总(持续更新中)
我于近日购置了一台13寸的MacBook Pro高配,打算開始进行iOS开发的学习.Pro的配置情况例如以下: (1)OS X Yosemite ,版本号10.10.3 (2)Retina显示屏,13 ...
- 模式识别之ocr项目---(模板匹配&BP神经网络训练)
摘 要 在MATLAB环境下利用USB摄像头采集字符图像,读取一帧保存为图像,然后对读取保存的字符图像,灰度化,二值化,在此基础上做倾斜矫正,对矫正的图像进行滤波平滑处理,然后对字符区域进行提取分割出 ...
- 话题讨论&征文--谈论大数据时我们在谈什么 获奖名单发布
从社会发展趋势的角度,非常明显大数据会是眼下肉眼可及的视野范围里能看到的最大趋势之中的一个.从传统IT 业到互联网.互联网到移动互联网,从以智能手机和Pad 为主要终端载体的移动互联网到可穿戴设备的移 ...