一道狄利克雷卷积模板题的组合做法
来源:互联网 发布:精准医疗大数据平台 编辑:程序博客网 时间:2024/05/22 10:35
一道狄利克雷卷积模板题的组合做法
题目描述:
给定
在
狄利克雷卷积做法
容易发现,
组合做法
显然,
考虑求从
然而这个dp的状态规模是
显然
而答案
自此问题得以解决。复杂度
#include <bits/stdc++.h>using namespace std;const int MAXN = 100005;struct node { int to, next;} edge[MAXN*20];int head[MAXN], top = 0; inline void push(int i, int j){ edge[++top] = (node){j, head[i]}, head[i] = top; }int n, k;void init(){ for (register int i = 1; i <= 100000; i++) for (register int j = 2; j*i <= 100000; j++) push(j*i, i);}long long f[MAXN][20], a[MAXN];const long long mod = 1000000007ll;long long fac[MAXN], inv[MAXN], g[MAXN], g2[MAXN];long long power(int a, long long n){ if (n == 0) return 1; long long b = a, ans = 1; for (int k = 0; k <= 30; k++) { if (n&(1ll<<k)) (ans *= b) %= mod; (b *= b) %= mod; } return ans;}inline long long choose(int K, int k){ return fac[K]*inv[k]%mod*inv[K-k]%mod; }void init_c(){ inv[0] = 1; for (int i = 1; i <= 100000; i++) inv[i] = (inv[i-1]*power(i, mod-2))%mod; fac[0] = 1; for (int i = 1; i <= 100000; i++) (fac[i] = fac[i-1]*i) %= mod;}void dp(){ scanf("%d%d", &n, &k); for (int i = 1; i <= n; i++) scanf("%lld", &f[i][1]); for (int j = 2; j <= 17; j++) for (register int i = 1; i <= n; i++) { f[i][j] = 0; for (register int k = head[i]; k; k = edge[k].next) { int to = edge[k].to; (f[i][j] += f[to][j-1]) %= mod; } } for (register int i = 1; i <= n; i++) { long long ans = 0; for (register int j = 1; j <= 17; j++) (ans += f[i][j]*choose(k-1, j-1)%mod) %= mod; g[i] = ans; }// cerr << endl; memset(g2, 0, sizeof g2); for (register int i = 1; i <= n; i++) for (register int j = 1; j*i <= n; j++) (g2[j*i] += g[i]) %= mod; for (int i = 1; i <= n; i++) printf("%lld ", g2[i]); puts("");}int main(){ freopen("b.in", "r" , stdin); freopen("b.out", "w", stdout); init(); init_c(); int T; scanf("%d", &T); while (T--) dp(); return 0;}
阅读全文
0 0
- 一道狄利克雷卷积模板题的组合做法
- [orz]一道题的神做法....
- Python解一道题的N种做法(1)
- Python解一道题的N种做法(2)
- 一道组合问题的算法题
- 一道组合题
- 一道C++模板题
- hdu 2072 找单词 很不错的一道题 模拟 and STL 2种做法
- 一道笔试题(122345求有条件全排列)的两种做法
- POJ 1011的一道题(木棍组合)
- ACM: 一道组合数学的题 poj3252
- [模板]字符串哈希的简易做法
- 一道母函数的模板题 (hdu 2082)
- HDU上一道最小生成树模板题的练习
- 用到qsort的一道题(+qsort模板)
- 图像处理-模板、卷积的整理
- 高斯拉普拉斯算子的卷积模板
- 关于何时使用继承和何时使用组合的做法
- 冒泡排序练习题
- vue--自定义全局方法,在组件里面使用
- css calc()用法
- 微信公众号接入指南
- dovecot+mariadb
- 一道狄利克雷卷积模板题的组合做法
- AngularJS杂记3----创建指令
- org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.问题思路
- 判断字符串String是否为空问题
- 冒泡排序、选择排序、插入排序总结
- 我也用github(2)——关联本地工程到github
- Ubuntu的各个版本下载地址
- Idea 启动tomcat 访问页面回显数据中文乱码解决方法
- HDU 4565 So Easy! 构造矩阵(两种方法)