USACO :Cow Pedigrees解题报告

来源:互联网 发布:淘宝需要水洗标的类目 编辑:程序博客网 时间:2024/05/18 03:55

也是一道dp,思想是:节点数为i,深度为k的树的个数 = 节点数为j,深度为k1的树的个数 乘以 节点数为i-j-1,深度为k2的树的个数, 其中k1,k2可有节点数确定范围。dp的方程式为:dp[i][max(k1,k2)+1] += dp[j][k1]*dp[i-j-1][k2];

 

 

/*
ID: xpli1
PROG: nocows
LANG: C++
*/

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

#define IN    fin
#define OUT    fout
#define max(a,b) (((a) > (b)) ? (a) : (b))

ifstream fin ("nocows.in", ios::in);
ofstream fout("nocows.out",ios::out);

int n,k;
int dp[201][101];

int main(){

 IN >> n >> k;

 int i,j,k1,k2;

 dp[1][1]  = 1;
 
 for(i = 3; i <= n; i+=2){
  
  for(j = 1; j < i - 1; j+=2){

   for(k1 = 1; k1 <= (j+1)/2; k1++){

    for(k2 = 1; k2 <= (i-j)/2; k2++){

     dp[i][max(k1,k2)+1] += dp[j][k1]*dp[i-j-1][k2];

     dp[i][max(k1,k2)+1] %= 9901;
    }
   }
  }
 }

 OUT << dp[n][k] << endl;

 return 0;
}

原创粉丝点击