P4127 [AHOI2009]同类分布
P4127 [AHOI2009]同类分布
题解
好的,敲上数位DP DFS板子
记录一下填的各位数字之和 sum ,然后记录一下原数 yuan
最后判断一下 yuan%sum==0 不就好啦???
突然意识到 dp 数组咋存???
dp[pos][sum][yuan]
pos , sum 都可以记录,但是 yuan ??? 1e18???
我们可以把yuan取模啊!
yuan%mod ?
取模啥呢???如果固定一个取模数字,结果很有可能就不对了,那就枚举吧
看到原式 yuan%sum ?= 0
mod = 1~sum 好啦
yuan%mod = 0 并且 sum=mod 不就相当于 yuan%sum==0 么
所以 dp[pos][sum][yuan%mod]
代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<queue> using namespace std; typedef long long ll; inline ll read()
{
ll ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} ll a,b;
ll c[],len=;
ll dp[][][];
ll mod; ll dfs(ll pos,ll sum,ll k,ll yuan,bool limit,bool qdl)
{
if(pos<=) return sum==mod&&k==;
if(!limit&&!qdl&&dp[pos][sum][k]!=-) return dp[pos][sum][k];
ll ans=;
ll up=limit?c[pos]:;
for(ll i=;i<=up;i++)
ans+=dfs(pos-,sum+i,(yuan*+i)%mod,yuan*+i,limit&&(i==up),qdl&&(i==));
if(!limit&&!qdl) dp[pos][sum][k]=ans;
return ans;
} ll fun(ll x)
{
memset(c,,sizeof(c));len=;
while(x)
{
c[++len]=x%;
x/=;
} ll ans=;
for(mod=;mod<=len*;mod++)
{
memset(dp,-,sizeof(dp));
ans+=dfs(len,,,,,);
}
return ans;
} int main()
{
a=read();b=read();
printf("%lld\n",fun(b)-fun(a-)); return ;
}
P4127 [AHOI2009]同类分布的更多相关文章
- 洛谷 P4127 [AHOI2009]同类分布 解题报告
P4127 [AHOI2009]同类分布 题目描述 给出两个数\(a,b\),求出\([a,b]\)中各位数字之和能整除原数的数的个数. 说明 对于所有的数据,\(1 ≤ a ≤ b ≤ 10^{18 ...
- 洛谷 P4127 [AHOI2009]同类分布
题意简述 求l~r之间各位数字之和能整除原数的数的个数. 题解思路 数位DP 代码 #include <cstdio> #include <cstring> typedef l ...
- 【BZOJ1799】[AHOI2009]同类分布(动态规划)
[BZOJ1799][AHOI2009]同类分布(动态规划) 题面 BZOJ 洛谷 题解 很容易想到数位\(dp\),然而数字和整除原数似乎不好记录.没关系,直接枚举数字和就好了,这样子就可以把整除原 ...
- [BZOJ1799][AHOI2009]同类分布(数位DP)
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MBSubmit: 1635 Solved: 728[Submit][S ...
- 【数位DP】【P4127】[AHOI2009]同类分布
Description 给出两个数 \(a,~b\) 求出 \([a~,b]\) 中各位数字之和能整除原数的数的个数. Limitations \(1 \leq a,~b \leq 10^{18}\) ...
- 【[AHOI2009]同类分布】
这是一篇有些赖皮的题解 (如果不赖皮的话,bzoj上也是能卡过去的) 首先由于我这个非常\(sb\)的方法复杂度高达\(O(171^4)\),所以面对极限的\(1e18\)的数据实在是卡死了 但是这个 ...
- [AHOI2009]同类分布
题目大意: 问在区间[l,r]内的正整数中,有多少数能被其个位数字之和整除. 思路: 数位DP. 极端情况下,每一位都是9,所以各位数字之和不超过9*18.(为了方便这里用了9*19) f[i][j] ...
- 【题解】AHOI2009同类分布
好开心呀~果然只有不看题解做出来的题目才会真正的有一种骄傲与满足吧ヾ(๑╹◡╹)ノ" 实际上这题只要顺藤摸瓜就可以了.首先按照数位dp的套路,有两维想必是省不掉:1.当前dp到到的位数:2. ...
- [luogu4127 AHOI2009] 同类分布 (数位dp)
传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...
随机推荐
- Webstorm2017.3.3软件的安装使用
下载 ▶进入jetbrains的官方网站点击download,即下载开始.官方网站链接:http://www.jetbrains.com/webstorm/ 安装 ▶双击刚下载完成的.exe文件开始进 ...
- 【Day3】1.正则表达式
1.正则表达式 2.案例 关闭贪婪模式
- (备忘)Python字符串、元组、列表、字典互相转换的方法
#1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type 'str'> {'age': 7, ...
- 如何制作 linux 系统 U盘启动盘
1.制作linux 系统的U盘启动盘,需要选择ISO 模式!给大家推荐几个制作相关软件以及相关制作过程(点击相应名字即可进入到网站):UltraISO.rufus.老毛桃.大白菜. UltraISO ...
- sklearn--数据集的处理 模型参数选择
1.随机划分训练集和测试集 sklearn.model_selection.train_test_split 一般形式: train_test_split是交叉验证中常用的函数,功能是从样本中随机的按 ...
- Hadoop_28_MapReduce_自定义 inputFormat
1. 自定义inputFormat 1.1.需求: 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件,此时就需要有相应解决方案; 1.2.分析: 小文件的优化 ...
- CentOS下安装好python和opencv,却import cv2失败
在安装好CentOS和OpenCV后,在终端输入python,在输入import cv2.却报错:ImportError:Mo module named cv2.浏览Python下文件夹发现cv2.s ...
- Java NIO 学习笔记一
缓冲区操作 进程执行I/O操作,归结起来就是向操作系统发出请求,它要么把缓存区例的数据排干(写),要么用数据把数据区填满(读).进程使用这一机制处理所有数据进出操作. 进程使用read()系统调用,要 ...
- 数据库底层索引为什么用B树
注意B-树就是B树,-只是一个符号. 简介 B/B+树是为了磁盘或其它存储设备而设计的一种平衡多路查找树(相对于二叉,B树每个内节点有多个分支),与红黑树相比,在相同的的节点的情况下,一颗B/B+树的 ...
- CSS世界中那些说起来很冷的知识
CSS世界中那些说起来很冷的知识 最近读了张鑫旭的新书<CSS世界>收获了不少对CSS的深度理解 也正值个人在公司内部进行部分章节的内容分享,于是顺带着直接把我即将分享的内容先给大家过过目 ...