博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2159
阅读量:4542 次
发布时间:2019-06-08

本文共 2122 字,大约阅读时间需要 7 分钟。

树形dp+第二类斯特林数

又是这种形式,只不过这次不用伯努利数了

直接搞肯定不行,我们化简一下式子,考虑x^n的组合意义,是把n个物品放到x个箱子里的方案数。那么就等于这个i=1->n,sigma(s[n,i]*A(x,i)),就是枚举要分成几组,这个用斯特林数算,然后把这些组放进箱子里,那么就是A(x,i),A是排列,但是这样还是不行,我们把A(x,i)=C(x,i)*i!,这样就行了,阶乘和斯特林数可以提出来,只要预处理一个点的组合数就行了,也就是∑i=1->n ∑ j=1->k C(dis(u,i),j),这个东西我们可以利用组合数的性质dp,也就是c[i][j]=c[i-1][j]+c[i-1][j-1],记住要减去重复的

#include
using namespace std;const int N = 1e5 + 5, M = 155, P = 10007;int n, m, L, now, A, B, Q;int s[M][M], up[N][M], down[N][M], fac[M];vector
G[N]; void dfs(int u, int last){ down[u][0] = 1; for(int i = 0; i < G[u].size(); ++i) { int v = G[u][i]; if(v == last) continue; dfs(v, u); down[u][0] = (down[u][0] + down[v][0]) % P; for(int j = 1; j <= m; ++j) down[u][j] = ((down[u][j] + (down[v][j - 1] + down[v][j]) % P) % P) % P; }}void dfs1(int u, int last){ if(last) { up[u][0] = n - down[u][0]; for(int i = 1; i <= m; ++i) { up[u][i] = (up[u][i] + ((up[last][i] + up[last][i - 1] + down[last][i] + down[last][i - 1] - down[u][i] - (down[u][i - 1] << 1)) % P + P) % P) % P; if(i > 1) up[u][i] = ((up[u][i] - down[u][i - 2]) % P + P) % P; } } for(int i = 0; i < G[u].size(); ++i) { int v = G[u][i]; if(v == last) continue; dfs1(v, u); }}int main(){ scanf("%d%d%d%d%d%d%d", &n, &m, &L, &now, &A, &B, &Q); for(int i = 1; i < n; ++i) { now = (now * A + B) % Q; int tmp = min(i, L); int u = i - now % tmp, v = i + 1; G[u].push_back(v); G[v].push_back(u); } s[0][0] = fac[0] = 1; for(int i = 1; i <= m; ++i) { fac[i] = fac[i - 1] * i % P; for(int j = 1; j <= m; ++j) s[i][j] = (s[i - 1][j] * j % P + s[i - 1][j - 1]) % P; } dfs(1, 0); dfs1(1, 0); for(int i = 1; i <= n; ++i) { int ans = 0; for(int j = 1; j <= m; ++j) ans = (ans + s[m][j] * fac[j] % P * (up[i][j] + down[i][j]) % P) % P; printf("%d\n", ans); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/19992147orz/p/8036379.html

你可能感兴趣的文章
内边距、边框和外边距的关系
查看>>
模板语言--变量
查看>>
div下面多个a标签的点击事件,并且获取a的属性
查看>>
php 计算 距离
查看>>
.hivehistory
查看>>
面试总结
查看>>
洛谷 P2814 家谱(gen)
查看>>
Android教程之MediaStore
查看>>
StarUML官网地址 http://staruml.io/
查看>>
死锁现象
查看>>
jquery点击按钮后倒计时并无法提交,倒计时结束后恢复
查看>>
mysql里面如何用sql语句让字符串转换为数字
查看>>
Xamarin.iOS中使用MvvmLight框架
查看>>
BZOJ1565: [NOI2009]植物大战僵尸
查看>>
git pull ,git fetch ,git merge
查看>>
LightOJ1417 Forwarding Emails(强连通分量+缩点+记忆化搜索)
查看>>
[No0000EB]C# 数组(Array)
查看>>
[No0000F0]DataGrid一行Row添加ToolTip,wpf
查看>>
这本书能让你睡得好
查看>>
[转]最好用的离线markdown编辑器Haroopad介绍
查看>>