[编程题] 小易喜欢的数列 dp
https://www.nowcoder.com/question/next?pid=6291726&qid=112729&tid=12736753
时间限制:1秒
空间限制:32768K
1、数列的长度为n
2、数列中的每个数都在1到k之间(包括1和k)
3、对于位置相邻的两个数A和B(A在B前),都满足(A <= B)或(A mod B != 0)(满足其一即可)
例如,当n = 4, k = 7
那么{1,7,7,2},它的长度是4,所有数字也在1到7范围内,并且满足第三条性质,所以小易是喜欢这个数列的
但是小易不喜欢{4,4,4,2}这个数列。小易给出n和k,希望你能帮他求出有多少个是他会喜欢的数列。
输入描述:
输入包括两个整数n和k(1 ≤ n ≤ 10, 1 ≤ k ≤ 10^5)
输出描述:
输出一个整数,即满足要求的数列个数,因为答案可能很大,输出对1,000,000,007取模的结果。
输入例子1:
2 2
输出例子1:
3 dp[i][j]表示第i个位置放的数是j的时候的合法方案是多少。
转移:dp[i - 1][j] = sigma(dp[i][1...j]) - (sigma(dp[i][j的因子]);
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
const int maxn = 1e5 + ;
const int MOD = 1e9 + ;
LL dp[][maxn];
void add(LL &x, LL y) {
x = (x + y + MOD) % MOD;
}
int prime[maxn][];
void init_prime() {
for (int i = ; i <= maxn - ; ++i) {
if (prime[i][]) continue; // 这个数i不是质数
for (int j = i; j <= maxn - ; j += i) {
prime[j][++prime[j][]] = i;
} //prime[12] = {2, 3}
}
}
vector<int> vc[maxn]; void ca(int num, int to, int now) {
if (now > num / ) return;
if (num % now == ) vc[num].push_back(now);
else return;
if (to == ) to = ;
for (int i = to; i <= prime[num][]; ++i) {
ca(num, i, now * prime[num][i]);
}
} void show() {
int f = ;
for (int i = ; i < vc[f].size(); ++i) {
cout << vc[f][i] << " ";
}
cout << endl;
} void work() {
int n, k;
cin >> n >> k;
int now = ;
LL sum = k;
for (int i = ; i <= k; ++i) {
dp[][i] = ;
}
init_prime();
for (int i = ; i <= k; ++i) {
ca(i, , );
}
// show();
for (int i = n - ; i >= ; --i) {
now = !now;
dp[now][] = sum;
for (int j = ; j <= k; ++j) {
dp[now][j] = sum;
// for (int f = 2 * j; f <= k; f += j) {
// add(dp[now][j], -dp[!now][f]);
// }
for (int f = ; f < vc[j].size(); ++f) {
add(dp[now][j], -dp[!now][vc[j][f]]);
}
}
sum = ;
for (int j = ; j <= k; ++j) {
// sum[j] = dp[now][j];
// add(sum[j], sum[j - 1]);
add(sum, dp[now][j]);
}
}
LL ans = ;
for (int i = ; i <= k; ++i) {
add(ans, dp[now][i]);
}
cout << ans << endl;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}
[编程题] 小易喜欢的数列 dp的更多相关文章
- 网易2016研发project师编程题
http://www.nowcoder.com/test/970447/summary [编程题] 小易的升级之路 小易常常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a ...
- 寒假作业2——Pintia小作业及编程题
编程题(电梯) Click to Github 听华一大大说可以用回溯算法,熟练运用搜索引擎的我就百度了一下,琢磨了很多天以为自己会了,真的看到题目还是一脸懵逼(#`-_ゝ-) ...
- 「10.14」小P的2048(模拟)·小P的单调数列(性质,DP)·小P的生成树(乱搞)
A. 小P的2048 模拟.....又没啥可说的,以后要认真打打模拟题了... B. 小P的单调数列 考场$n^2log(n)$的SB思路有人听吗 正解当然不是这样, 事实上我们每次选取的只有一段区间 ...
- 转载:2017百度春季实习生五道编程题[全AC]
装载至:https://blog.csdn.net/zmdsjtu/article/details/70880761 1[编程题]买帽子 时间限制:1秒空间限制:32768K度度熊想去商场买一顶帽子, ...
- 50道经典的JAVA编程题 (1-5)
后天java考试,现在闲着也是闲着,来做做java题吧. 前不久在网上看见了50道java算法编程题,感觉还不错,记得大一学C语言的时候做过一些,现在用java来回顾下吧,也算应付考试吧. 代码要是有 ...
- scauoj 18025 小明的密码 数位DP
18025 小明的密码 时间限制:4000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description 小明的密码由N(1<=N& ...
- 算法工程师<编程题>
<编程题> 1.[Maximum Product Subarray 求最大子数组乘积] 这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的 ...
- 网易2019校招内推编程题-瞌睡-C++实现
[编程题] 瞌睡 时间限制:1秒 空间限制:262144K 小易觉得高数课太无聊了,决定睡觉.不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下.你知道了小易对一堂课每分钟 ...
- 网易2019校招内推编程题-俄罗斯方块-C++实现
[编程题] 俄罗斯方块 时间限制:1秒 空间限制:262144K 小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块.因为它比较古老,所以规则和一般的俄罗斯方块不同.荧幕上一共有 n 列,每次都会有 ...
随机推荐
- Ubuntu jdk安装详细
安装jdk步骤: 1.首先连接130的ip地址,进去Tools拷贝jdk压缩文件(Tools中已经有下载好的jdk版本,也可自己另行下载) 2.将拷贝好的压缩文件解压 tar -zxvf 压缩文件名 ...
- js中使用Java的方式
1. 使用DWR框架 2. 使用AJAX方式
- C#:最简洁强大的代码生成器
这是我们项目中最常用,也是最强大的代码生成器,可以自动生成 存储过程,Model,DAL,BLL 多层的脚本. 第一步:配置config,设置连接的数据库 <?xml version=" ...
- 混合APP开发-hybrid 升级流程
本文来自网易云社区 作者:王贝 目前大多数APP已经应用hybrid进混合开发,这不,我们的gacha APP这个版本已经开始使用hybrid来开发了,hybrid的优势这里就不多说了,这里主要讲一下 ...
- VS2015无法创建C++工程解决方法!!
VS2015默认安装时候没有安装C++,如果安装C++没有选择全部C++项目,则无法创建C++工程,在控制面板里的删除程序中,选择VS2015,随后选择修改,把C++项目都选择上就可以了,这样安装完毕 ...
- c++语言的组合类的使用,用组合类的方法计算两点间距离。
组合类的使用主要涉及到类的构造函数,类的复制构造函数. #include <iostream> #include<cmath> class Point{ public: Poi ...
- Chrome插件-Postman Interceptor
postman有一个chrome插件 Postman Interceptor,可以让postman中发送请求的时候使用这个网站的浏览器cookie Postman Interceptor,可以让pos ...
- NYOJ1238 最小换乘 (dijkstra)
最少换乘 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...
- 用勤哲excel服务器开发设计燃烧器生产行业ERP
J公司是一家专业从事设计.制造.生产及销售各类燃油燃气燃烧设备和各类冶金燃烧装置的专业公司.2011年随着企业的发展,原来手工操作模式已经很难应付日益增长的工作量. J公司希望通过软件管理实现以下几个 ...
- 04->python字典
字典dict 1.数据类型分类(按可变和不可变) 不可变数据类型:数字.bool.str.tuple 可变数据类型:list.dict.set 2.dict的组成 key:va ...