[luoguP2606] [ZJOI2010]排列计数(DP)
传送门
如果能够根据题意看出这是一个堆的话,那么就有些思路了。。
首先堆顶必须是最小元素,然后左右儿子可以预处理出来都有多少个数,
把剩余的数任意分配给两个儿子,用排列组合即可
dp(now) = dp(now << 1) * dp(now << 1 | 1) * C(sum[now] 1, sum[now << 1])
#include <cstdio>#define N 5000001#define LL long longint n;LL p, inv[N], A[N], B[N], s[N];inline LL C(int x, int y)inline LL dp(int now)int main()for(i = 1; i <= n; i++)for(j = i; j; j >>= 1) s[j]++;printf("%lld\n", (dp(1) + p) % p);return 0;}
上一篇:[luoguP2053] [SCOI2007]修车(最小费用最大流)
DP
pla文件怎么看,pla文件用什么打开?
pl1文件怎么看,pl1文件用什么打开?
pl文件怎么看,pl文件用什么打开?
pl0文件怎么看,pl0文件用什么打开?
pkt文件怎么看,pkt文件用什么打开?
pkm文件怎么看,pkm文件用什么打开?
pks文件怎么看,pks文件用什么打开?
pka文件怎么看,pka文件用什么打开?
pkh文件怎么看,pkh文件用什么打开?
pkg文件怎么看,pkg文件用什么打开?