码迷,mamicode.com
首页 > 其他好文 > 详细

USACO Cow Pedigrees

时间:2014-05-10 02:27:59      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:blog   class   code   color   c   int   

题意是,有这样一种二叉树,每个节点的孩子数目不是0就是2,现在有N个节点,要组成一颗高度为K的这样的二叉树,问你有多少种组成方法。

理所当然的想到了DP,一开始想的方程是

f(i,j)为给你i 个节点,构成高度为j的这样的二叉树的种类数,转移的时候

f(i,j) = Σf(k1,h1)*f(k2,h2),其中k1+k2=i-1,max(h1,h2)=k

但是题目给的复杂度N是200,K是100,这样算来复杂度是N^2*K^2达到了4*10^8,显然超过了要求。

优化的过程我想了很久,最后想到一个利用前缀和来简化复杂度的方法。

设f(i,j)为给你i个节点,构成高度不大于j的这样的二叉树的种类数,转移的时候

f(i.j)=Σf(k1,j)*f(k2,j),其中k1+k2=i-1,这样子的话复杂度就变成了N^2*K,4*10^6,可以接受了。

o(╯□╰)o但是边界处理上面又花费了许多时间,首先因为j表示的是不小于高度j的,这样子的话无论i,j能否构成这样子的二叉树都要进行计算,然后f(1,x),x<=K全部要处理成1

另外做前缀和相减的时候别忘记加上MOD防止变成负数哦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
ID: flsnnx1
LANG: C++
TASK: nocows
*/
 
#include <cstdio>
#include <sstream>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
#include <cctype>
#include <ctime>
#include <set>
#include <climits>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <cmath>
#include <string>
#include <list>
 
#define INPUT_FILE "nocows.in"
#define OUTPUT_FILE "nocows.out"
 
using namespace std;
 
typedef long long LL;
const int INF = INT_MAX / 2;
 
void setfile() {
    freopen(INPUT_FILE,"r",stdin);
    freopen(OUTPUT_FILE,"w",stdout);
}
 
const int maxn = 205;
const int maxk = 105;
const int MOD = 9901;
int dp[maxn][maxk];
 
int main() {
    setfile();
    int N,K;
    cin >> N >> K;
    for(int i = 1;i <= K;i++) dp[1][i] = 1;
    for(int i = 3;i <= N;i++) {
        for(int j = 2;j <= K;j++) {
            for(int k = 1;k < i - 1;k++) {
                LL adc = (dp[k][j - 1] % MOD) * (dp[i - 1 - k][j - 1]) % MOD;
                dp[i][j] += adc % MOD;
                dp[i][j] %= MOD;
            }
        }
    }
    cout << (dp[N][K] - dp[N][K - 1] + MOD) % 9901 << endl;
    return 0;
}

  

USACO Cow Pedigrees,布布扣,bubuko.com

USACO Cow Pedigrees

标签:blog   class   code   color   c   int   

原文地址:http://www.cnblogs.com/rolight/p/3719746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!