import java.util.Scanner;
public class Main {
public static void main(String[] arg) {
Scanner scanner = new Scanner(System.in);
// todo
}
}
NC13611. 树
描述
输入描述
第一行两个整数n,k代表点数和颜色数; 接下来n-1行,每行两个整数x,y表示x与y之间存在一条边;
输出描述
输出一个整数表示方案数(mod 1e9+7)。
示例1
输入:
4 3 1 2 2 3 2 4
输出:
39
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 1164K, 提交时间: 2023-06-13 16:24:26
#include<bits/stdc++.h>using namespace std;#define int long longconst int p=1e9+7;int n,m,ans,f[305][305];signed main(){scanf("%lld%lld",&n,&m);f[0][0]=1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)f[i][j]=(f[i-1][j]+f[i-1][j-1]*(m-j+1)%p)%p;for(int i=1;i<=m;i++)ans=(ans+f[n][i])%p;cout<<ans;}
C++14(g++5.4) 解法, 执行用时: 6ms, 内存消耗: 1136K, 提交时间: 2019-10-20 10:07:12
#include<bits/stdc++.h>using namespace std;#define int long longint n,k;int f[303][303];const int mod=1e9+7;main() {cin>>n>>k;f[0][0]=1;for(int i=1;i<=n;i++)for(int j=1;j<=k;j++)f[i][j]=(f[i-1][j]+f[i-1][j-1]*(k-j+1))%mod;int ans=0;for(int i=1;i<=k;i++) {ans+=f[n][i];ans%=mod;}cout<<ans;}
Python3 解法, 执行用时: 79ms, 内存消耗: 6876K, 提交时间: 2021-05-27 14:06:23
MOD = int(1e9 + 7)n, k = map(int, input().split())for _ in range(n - 1):u, v = map(int, input().split())f = [[0] * (k + 1) for _ in range(n + 1)]f[0][0] = 1for i in range(1, n + 1):for j in range(1, k + 1):f[i][j] = (f[i - 1][j] + f[i - 1][j - 1] * (k - j + 1)) % MODprint(sum(f[-1]) % MOD)
C++11(clang++ 3.9) 解法, 执行用时: 6ms, 内存消耗: 1248K, 提交时间: 2020-04-18 16:48:24
#include<iostream>using namespace std;#define L long longconst L M=1e9+7;L n,m,ans,f[303][303];int main(){cin>>n>>m;f[0][0]=1;for(L i=1;i<=n;i++)for(L j=1;j<=m;j++) f[i][j]=(f[i-1][j]+f[i-1][j-1]*(m-j+1)%M)%M;for(L i=1;i<=m;i++) ans=(ans+f[n][i])%M;cout<<ans;}