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 ;
}

最新文章

  1. html 5 canvas画布整理
  2. C#中HashTable的用法
  3. IOS在线安装App
  4. Teradata(不同date输出要求;表类型)
  5. [技巧]如何清除VS2008的最近打开项目
  6. C#使用oledb方式将excel数据导入到datagridview后数据被截断为 255 个字符
  7. splinter python浏览器自动化操作,模拟浏览器的行为
  8. 基于visual Studio2013解决面试题之1109全排列
  9. Python在信号与系统(1)——Hilbert兑换,Hilbert在国家统计局的包络检测应用,FIR_LPF滤波器设计,格鲁吉亚也迫使高FM(PM)调制
  10. 学习笔记-C++ STL iterator与对指针的理解-20170618
  11. [bzoj4881][Lydsy2017年5月月赛]线段游戏
  12. ELK 架构之 Logstash 和 Filebeat 配置使用(采集过滤)
  13. MYSQL———正则表达式查询!
  14. ClickHouse高可用集群的配置
  15. 给电脑插上无线网卡,变成路由器----Windows系统承载网络的使用
  16. 《UnityShader入门精要》学习笔记之渲染流水线
  17. vue methods computed watch区别
  18. 阿里云:游戏行业DDoS攻击解决方案
  19. IntelliJ IDEA 设置Output 窗口字体大小
  20. kubernetes实战(二十):k8s一键部署高可用Prometheus并实现邮件告警

热门文章

  1. mysql--约束条件
  2. labview中的移位寄存器、循环隧道,自动索引隧道的区别
  3. 美团热更新Robust Demo演示
  4. springcloud 定义切面实现对请求操作记录日志,方便后面分析接口详情
  5. Info.plist文件配置及注意事项
  6. SOA架构之限流
  7. STL_ALGORITHM_H
  8. web安全问题-csrf
  9. Mysql(Linux服务器)root用户密码忘记重置方法
  10. django2集成DjangoUeditor富文本编辑器