您的位置:首页 > 移动开发 > IOS开发

USACO :Cow Pedigrees解题报告

2010-06-24 15:43 337 查看
也是一道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
[k] << endl;

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios c