BZOJ 3679 数位DP
思路:
f[i][j]表示i位数乘积为j的方案数
j的取值最多5000多种,那就开个map存一下好了
f[i][mp[k*rec[j]]]+=f[i-1][j];
//By SiriusRen
#include <map>
#include <cstdio>
using namespace std;
#define int long long
int n,L,R,tot,rec[],f[][];
map<int,int>mp;
void dfs(int x){
if(x>n||mp.find(x)!=mp.end())return;
mp[x]=++tot,rec[tot]=x;
for(int i=;i<=;i++)dfs(x*i);
}
map<int,int>::iterator it;
int calc(int m){
int p=,base=,now=,ans=;
for(;*p<=m;base++,p*=);
for(int i=;i<=base;i++)
for(int j=;j<=tot;j++)
ans+=f[i][j];
for(int i=base;i>=;i--){
for(int j=;j<=tot;j++)
for(int k=;k<m/p;k++)
if(rec[j]*k*now<=n)
ans+=f[i][j];
now=m/p*now,m%=p,p/=;
if(!now)return ans;
}
return ans+(now<=n);
}
signed main(){
scanf("%lld%lld%lld",&n,&L,&R);
dfs(),f[][]=;
for(int i=;i<=;i++)
for(int j=;j<=tot;j++)
for(int k=;k<=;k++)
if(k*rec[j]<=n)f[i][mp[k*rec[j]]]+=f[i-][j];
printf("%lld\n",calc(R-)-calc(L-));
}
BZOJ 3679 数位DP的更多相关文章
- bzoj 3668 数位DP
收获: 1.如果有很多位操作,并且不包含+-×/等高级运算,那么可以一位一位考虑,如果求一个最优解,可以尝试逐位确定,这道题因为原始攻击值有范围,那么就需要数位DP. /*************** ...
- bzoj 1833 数位dp
很裸的数位dp. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #defi ...
- bzoj 3209 数位DP+欧拉定理
枚举1的个数,统计有那么多1的数的个数 /************************************************************** Problem: 3209 Us ...
- BZOJ - 1026 数位DP
中文题面,注意st是不可以放到dp里面的,否则每次solve都要清零 注意状态的转移要st&&i==0,因为子结构也可能是st(当高位取0时) 而st是必然合法的 #include&l ...
- BZOJ 3209 数位DP
思路: 先预处理出来组合数 按位做 枚举sum[x]是多少 注意Mod不是一个质数 //By SiriusRen #include <cstdio> using namespace std ...
- BZOJ 3679 数字之积 数位DP
思路:数位DP 提交:\(2\)次 错因:进行下一层\(dfs\)时的状态转移出错 题解: 还是记忆化搜索就行,但是要用\(map\)记忆化. 见代码 #include<cstdio> # ...
- [BZOJ 1833] [ZJOI2010] count 数字计数 【数位DP】
题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i ...
- [BZOJ 1026] [SCOI 2009] Windy数 【数位DP】
题目链接:BZOJ - 1026 题目分析 这道题是一道数位DP的基础题,对于完全不会数位DP的我来说也是难题.. 对于询问 [a,b] 的区间的答案,我们对询问进行差分,求 [0,b] - [0,a ...
- BZOJ.4513.[SDOI2016]储能表(数位DP)
BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...
随机推荐
- shouldComponentUpdate不能直接比较object
凡是参阅过react官方英文文档的童鞋大体上都能知道对于一个组件来说,其state的改变(调用this.setState()方法)以及从父组件接受的props发生变化时,会导致组件重渲染,正所谓&qu ...
- B+树知识点
B+树介绍 目录 B+树 B+树的插入操作 B+树的删除操作 回到顶部 B+树 B+树和二叉树.平衡二叉树一样,都是经典的数据结构.B+树由B树和索引顺序访问方法(ISAM,是不是很熟悉?对,这也 ...
- redis --------- 使用命令(每天一个)
Key(键) Del 语法:DEL Key [key ...] 删除给定的一个或者多个key 不存在的key会被忽略. 返回值: 被删粗key的数量# 删除单个 key redis ...
- vivado2018.3 与 modelsim联合仿真
我用的是目前最新版本的软件,vivado2018.3与modelsim10.6d.废话不多说,直接上操作 1.modelsim编译vivado库 1)双击启动vivado软件,如下图操作 2)Simu ...
- sysbench_mysql
ref http://seanlook.com/2016/03/28/mysql-sysbench/ 测试 当执行下面这个sysbench测试mysql的时候,你不知道的可能可能是: 这到底是在测试读 ...
- POJ-1655 Balancing Act(树的重心)
Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the t ...
- 1. Python中的基本数据类型、运算、变量
本文利用的是Python 3.x版本,建议学习3.x版本 Python中的基本数据类型.运算.变量 1. 基本数据类型 1.1 整数 py可以处理任意大小的整数,例如123,1234567891324 ...
- i++与++i的区别及效率
i++与++i的区别及效率 先看看基本区别:i++ :先在i所在的表达式中使用i的当前值,后让i加1++i :让i先加1,然后在i所在的表达式中使用i的新值 看一些视频教程里面写for循环的时候都 ...
- vue中对象属性改变视图不更新问题
常规情况下我们在vue实例的data中设置响应数据.但当数据为对象,我们增加或删除对象属性值时,视图并不触发更新,如何解决这个问题呢? let vm = new Vue{ el: '#app', da ...
- [cogs729] [网络流24题#5] 圆桌聚餐 [网络流,最大流,多重二分图匹配]
建图:从源点向单位连边,边权为单位人数,从单位向圆桌连边,边权为1,从圆桌向汇点连边,边权为圆桌容量. #include <iostream> #include <algorithm ...