932E-TeamWork 二项式定理+求导/DP

题目链接

932E

题解

题意

∑ i = 0 n ( n i ) ∗ i k . \sum_{i = 0}^{n} \begin{pmatrix} n\\i\\\end{pmatrix} * i^k. i=0n(ni)ik.

思路

f ( x ) = ( 1 + x ) n = ∑ i = 0 n ( n i ) ∗ x i f(x) = (1 + x)^n = \sum_{i = 0}^n\begin{pmatrix} n\\i\\\end{pmatrix} * x^i f(x)=(1+x)n=i=0n(ni)xi
x f ′ ( x ) = ∑ i = 0 n ( n i ) ∗ x i ∗ i xf'(x) = \sum_{i = 0}^n\begin{pmatrix} n\\i\\\end{pmatrix} * x^i *i xf(x)=i=0n(ni)xii
. . . . . . ...... ......
x k ∗ f ( k ) ( x ) = ∑ i = 0 n ( n i ) ∗ i k ∗ x i x^k*f^{(k)}(x) = \sum_{i = 0}^n\begin{pmatrix} n\\i\\\end{pmatrix} * i^k * x^i xkf(k)(x)=i=0n(ni)ikxi
其中,令x == 1即为所求。

我们定义 f [ a ] [ b ] [ c ] = 对 x b ∗ ( 1 + x ) c 求 导 并 乘 以 x , n 次 f[a][b][c] = 对x^b * (1 + x)^c 求导并乘以x,n次 f[a][b][c]=xb(1+x)cxn。则 f [ k ] [ 0 ] [ n ] f[k][0][n] f[k][0][n] 即为所求。
转移方程为: f [ a ] [ b ] [ c ] = b ∗ f [ a − 1 ] [ b ] [ c ] + c ∗ f [ a − 1 ] [ b + 1 ] [ c − 1 ] f[a][b][c] = b * f[a- 1][b][c] + c * f[a - 1][b + 1][c - 1] f[a][b][c]=bf[a1][b][c]+cf[a1][b+1][c1]
其中当 a = = 0 a == 0 a==0 时, f [ a ] [ b ] [ c ] = 2 c f[a][b][c] = 2^c f[a][b][c]=2c

其中b、c之和恒等于n,故可以将数组降至三维。

AC代码

递归

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int const N = 5e3 + 10;
int const Mod = 1e9 + 7;
int f[N][N], n, k;

int FastPower(int a, int k) {
    int ans = 1;
    while (k) {
        if (k & 1) ans = 1LL * ans * a % Mod;
        a = 1LL * a * a % Mod;
        k >>= 1;
    }
    return ans;
}

int dp(int a, int b) {
    if (b > n) return 0;
    if (f[a][b] >= 0) return f[a][b];
	if (a == 0) return (f[a][b] = FastPower(2, n - b));
	return (f[a][b] = (1LL * b * dp(a - 1, b) % Mod + 1LL * (n - b) * dp(a - 1, b + 1) % Mod) % Mod);
}

int main() {
    scanf("%d%d", &n, &k);
    memset(f, -1, sizeof(f));
    printf("%d\n", dp(k, 0));
    return 0;
}

参考资料

https://blog.csdn.net/Charlie_jilei/article/details/79330611?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.channel_param

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值