Luogu 2767

Luogu 2767

 

 2种方法,一种是数学方法,一种是DP。

一.数学方法

Luogu 2767

 

这个记一波结论吧,至于组合数那就是Lucas定理啦。

二.DP

这个就比较简单易懂了

设dp[i][j]为一共有i个点,根节点有j个节点的方案数

Luogu 2767

 

 

#include<bits/stdc++.h>
using namespace std;
const int mod=10007;
int n,m,dp[1001][1001];
int main()
{
    cin>>n>>m;
    for(int i=0;i<=m;i++) dp[0][i]=1;
    for(int i=0;i<=m;i++) dp[1][i]=1;
    for(int i=2;i<=n;i++)
    for(int j=1;j<=m;j++)
    for(int k=0;k<i;k++)
    dp[i][j]=(dp[i][j]+dp[k][m]*dp[i-k][j-1]%mod)%mod;
    cout<<dp[n][m];
    return 0;
}

 

Luogu 2767

上一篇:noip模拟 *第一题(基础dp?)


下一篇:记录下并发超发的问题