NOIP模拟赛超级树 DP

Posted TS_Hugh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP模拟赛超级树 DP相关的知识,希望对你有一定的参考价值。

这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........

这个题的正解体现了一种神奇的思想,对于好合并但是不好转移的dp我们可以先打散然后合并到最后,所以我们从一开始维护f[i][j]表示i阶超级树中有j个互不相交的路径的方案数。

#include <cstdio>
typedef long long LL;
LL f[310][310],mod,temp;
int n;
int main(){
    scanf("%d%lld",&n,&mod);
    f[1][0]=f[1][1]=1;
    for(int i=1;i<n;i++){
        for(int k=0;k<=n;k++)f[i][k]%=mod;
        for(int l=0;l<=n;l++)
            for(int r=0;l+r<=n;r++)
                temp=f[i][l]*f[i][r]%mod,
                f[i+1][l+r]+=temp*(1+(l+r)*2),
                f[i+1][l+r+1]+=temp,
                f[i+1][l+r-1]+=temp*(l*r*2+(l*(l-1)+r*(r-1)));
    }
    printf("%lld",f[n][1]%mod);
}

 

以上是关于NOIP模拟赛超级树 DP的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客2017.9.9 Day1 NOIP模拟赛

noip历年试题

noip模拟9[斐波那契·数颜色·分组](洛谷模拟测试)

火山喷发 计蒜客16862 NOIP模拟赛 概率DP

NOIP2017酱油记

noip模拟 分割土地(dp)