zoukankan      html  css  js  c++  java
  • Codeforces 914H Ember and Storm's Tree Game 【DP】*

    Codeforces 914H Ember and Storm’s Tree Game


    题目链接


    ORZ

    果然出了一套自闭题

    这题让你算出第一个人有必胜策略的方案数

    然后我们就发现必胜的条件就是树上的每条路径都是单调或者单峰的

    所以我们考虑DP一个每条路径都是单调或单峰的树出来

    所以考虑DPf[i][j]表示大小是i的子树根节点的度数是j,并且满足任何一个点都比他的父亲大

    那么我们发现这样的情况并不全,但是又可以发现满足任何一个点比他的父亲小和大是等价的

    所以我们可以开开心心地开始DP

    但是问题又来了

    我们在统计一个子树的贡献的时候常常会把编号算重,所以我们可以每次DP累加贡献的时候只考虑编号次小的那个点所在的子树

    然后我们可以很方便地累加贡献了,还需要加上组合数,又因为我们发现当前累加的子树根节点的度数大小无关紧要,所以我们直接累加前缀和,用s表示

    f(i,k+1)=f(ij,k)×(l=1d1f(j,l))×(i2j1)

    但是我们又发现,一棵合法的树有可能有多个合法的根被我们统计,但是我们可以发现所有合法的根一定是一条链,然后我们考虑只在链的一端统计答案就可以了


    #include<bits/stdc++.h>
    using namespace std;
    #define fu(a,b,c) for(int a=b;a<=c;a++)
    #define fd(a,b,c) for(int a=b;a>=c;a--)
    int read(){
        int ans=0,w=1;char c=getchar();
        while(!isdigit(c)&&c!='-')c=getchar();
        if(c=='-')w=-1,c=getchar();
        while(isdigit(c))ans=(ans<<1)+(ans<<3)+c-'0',c=getchar();
        return ans*w;
    }
    #define N 210
    #define LL long long
    int n,d;
    LL ans=0,Mod;
    LL c[N][N],f[N][N],s[N][N];
    void init(){
        fu(i,0,n){
            c[i][0]=1;
            fu(j,1,i)c[i][j]=(c[i-1][j]+c[i-1][j-1])%Mod;
        }
        fu(i,0,d)s[1][i]=1;
        f[1][0]=1;
    }
    int main(){
        n=read();d=read();Mod=read();
        init();
        fu(i,2,n){
            fu(j,1,i-1)
                fu(k,0,d-1)
                    f[i][k+1]=(s[j][d-1]*c[i-2][j-1]%Mod*f[i-j][k]%Mod+f[i][k+1])%Mod;
            fu(j,1,d)s[i][j]=(s[i][j-1]+f[i][j])%Mod;
        }
        fu(i,0,n-1)
            fu(j,0,d)
                fu(k,0,d-j)if(k!=1)
                    ans=(ans+f[i+1][j]*f[n-i][k]%Mod)%Mod;
        ans=2ll*n*(n-1)*ans%Mod;
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/dream-maker-yk/p/9676279.html
Copyright © 2011-2022 走看看