USACO :Cow Pedigrees解题报告

也是一道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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值