zoukankan      html  css  js  c++  java
  • USACO2.32 Cow Pedigrees

    题意:

    用N个点组成一棵深度为K的二叉树,求一共有几种方法?

    分析:哎,感觉自己好水呀,借鉴了USACO上面的题解才过的,自己想了好久都没什么思路

    设dp[i,j]表示用i个点组成深度最多为j的二叉树的方法数,(注意,这里i必定是奇数),则:

    dp[i,j]=∑(dp[k,j-1]×dp[i-1-k,j-1])(k∈{1..i-2})
    边界条件:dp[1,i]=1
    

    我们要求的是深度恰好为K的方法数S,易知S=dp[n,k]-dp[n,k-1]。但需要注意的是,如果每次都取模,最后可能会有dp[n,k]<dp[n,k-1],所以可以用S=(dp[n,k]-dp[n,k-1]+v) mod v

    /*
    ID: nanke691
    LANG: C++
    TASK: nocows
    */
    #include<iostream>
    #include<algorithm>
    #include<fstream>
    #include<string.h>
    using namespace std;
    int dp[210][110];
    int main()
    {
    	freopen("nocows.in","r",stdin);
    	freopen("nocows.out","w",stdout);
    	int n,k;
    	cin>>n>>k;
    	memset(dp,0,sizeof(dp));
    	for(int i=1;i<=n;i++)
    		dp[1][i]=1;
    	for(int i=3;i<=n;i+=2)
    		for(int j=2;j<=k;j++)
    		{
    			for(int l=1;l<=i-2;l+=2)
    				dp[i][j]+=(dp[l][j-1]*dp[i-l-1][j-1])%9901;
    			dp[i][j]%=9901;
    		}
    	cout<<(dp[n][k]-dp[n][k-1]+9901)%9901<<endl;
    	return 0;
    }
    
  • 相关阅读:
    PowerMock详解
    java -agent与Javassist
    gradle_____最后到齐的构建工具
    JVM--参数调优
    提高速度 history 的利用
    shell-异步执行
    redis常用命令与使用分析
    chrome mac 快捷键
    idea的快捷键和操作
    mysql事务以及隔离级别
  • 原文地址:https://www.cnblogs.com/nanke/p/2249118.html
Copyright © 2011-2022 走看看