[CF995F]Cowmpany Cowmpensation
codeforces description 一棵$n$个节点的树,给每个节点标一个$[1,m]$之间的编号,要求儿子的权值不大于父亲权值。求方案数。$n\le3000,n\le10^9$ sol 可以证明答案是关于$m$的一个$n$次多项式。我不会证。 如果$P(x)$是关于$x$的$n$次多项式,则有 $$P(x)=\sum_{i=0}^{n}(-1)^{n-i}P(i)\frac{x(x-1)...(x-n)}{(n-i)!i!(x-i)}$$ 可见杜教$\mbox{PPT}$《多项式与求和》。 所以只要对$[1,n]$求答案就可以了,很显然是一个$O(n^2)$的$dp$,所以复杂度是$O(n^2)$。 code #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int gi(){ int x=0,w=1;char ch=getchar(); while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if (ch=='-') w=0,ch=getchar(); while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return w?x:-x; } const int