usaco:Cow Pedigrees

2024-02-06 06:38
文章标签 cow usaco pedigrees

本文主要是介绍usaco:Cow Pedigrees,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dp原理:

(1)dp[i][j] 表示 i 个节点建 <= j 层树的结果数。结果:res[n][k] = dp[n][k] - dp[n][k-1](res[i][j] 表示用 i 个节点建 j 层数的结果数);

(2)dp[i][j] = E(dp[k][j - 1] * dp[i - k - 1][j - 1])(1 <= k <= i - 2)(E为求和);

(3)注意(2)中k每次加2,因为左右子树的节点数都是奇数。

/*
ID: 
LANG: C++
TASK: nocows
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>#define IN "nocows.in"
#define OUT "nocows.out"
#define M 205
#define MOD 9901using namespace std;int dp[M][M];
int n, k;
void solve()
{for(int i = 1; i <= k; i++)dp[1][i] = 1;for(int i = 2; i <= k; i++) {for(int j = 1; j <= n; j++) {for(int l = 1; l <= j - 2; l += 2) {dp[j][i] += (dp[l][i - 1] * dp[j - l - 1][i - 1]) % MOD;dp[j][i] %= MOD;}}}
}int main()
{freopen(IN, "rb", stdin);freopen(OUT, "wb", stdout);while(scanf("%d%d", &n, &k) != EOF) {solve();printf("%d\n", (MOD + dp[n][k] - dp[n][k - 1]) % MOD);}fclose(stdin);fclose(stdout);return 0;
}





这篇关于usaco:Cow Pedigrees的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683441

相关文章

[POJ 3045] Cow Acrobats (贪心)

POJ - 3045 有若干头牛叠罗汉,每头牛有一个冒险值,为在其上面所有牛的重量,减去其力量值 问如何使得最大的冒险值最小 挑战上面的题,本来想着用二分答案的方法做 虽然觉得自己的思路没什么问题,但是 WA了 百度了一发题解,发现这题正解是贪心 首先直观感觉力量大的,体重轻的应该在下面,但这有两个因素,不好确定 可利用调整法试图找出答案 假设我已经找到了答案排列 ( 猜想答案序列

POJ3270 cow sorting 【polya】

题目描述: 给你一个数字序列(每个数字唯一),每次你可以交换任意两个数字,代价为这两个数字的和,问最少用多少代价能把这个序列按升序排列好。 题目的具体做法是参考刘汝佳的《算法艺术与信息学奥赛》大概思路是:以后再用别种方法解, 1.找出初始状态和目标状态。明显,目标状态就是排序后的状态。 2.画出置换群,在里面找循环。例如,数字是8 4 5 3 2 7 明显,

POJ-1946 Cow Cycling DP

题目大意:公牛比赛,给出的信息有n只公牛,每只牛具有e能量,要求跑d圈所花费的最少时间,同时这n只公牛当中领头跑的牛需要耗费k*k的能量才能跑k圈,其他牛则只需要耗费k的能量。若当中的公牛能量全部耗尽,此时可以舍弃这只公牛,完成到达d个圈的奔跑也是成功的。 Dp[i][j][k] 表示i头牛,每头牛花费了j能量,跑了k圈所花费的最少时间 #include <stdio.h>#i

POJ 3660 Cow Contest 传递闭包确定名次

题目来源:POJ 3660 Cow Contest 题意:n头牛 下面m行 每行x y 代表牛x打败了牛y 问有几头牛的最终排名是确定的 思路:传递闭包 如果x打败了y 令a[x][y]=1 并且a[y][x]=-1 其他不知道的都为0  然后floyd 最后对于每头牛数一下是否有n-1个1或者-1(就是不为0) 如果有n-1个不为0 说明该牛和其他牛都确定了状态 #include <c

poj3270 Cow Sorting 置换群

题意:有一个序列,你需要将通过交换使得序列最后单调增。每次交换的代价为交换的两个数的和,求将序列变成单调增地最小代价 和。 思路:如果有一个序列:8 4 5 3 2 7 ,那么最终的序列为:2 3 4 5 7 8 。如果视作是一个置换群的作用,那么可以写出循环之积: (8 2 7)(4 3 5)。对于每个循环,每个数都至少被交换一次,所以我们应该用循环中的最小值和每个数交换,设循环数的最小值

poj_3278_Catch That Cow_201407241728

Catch That Cow Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 45959 Accepted: 14400 Description Farmer John has been informed of the location of a fugitive cow and wants to catch h

USACO Mother's Milk

题意 :有3个杯子,问当a杯子为空时,c杯子能够装多少种体积的水 思路 :倒水问题,有广搜,对于当前,接下来有6种状态:a到给b,a到给c ,c到给b,c到给a,b到给a, b到给c。每一种状态又有两种情况:能装满和不能装满。这里还要注意一点就是必须判断重复,即防止a倒给b,然后b再倒给a这种情况的发生! 这里还有一个节省代码的技巧:因为情况很多,一开始我使用6个if,结果代码写的老长,十分不

poj 3623 Best Cow Line, Gold(贪心)

题目大意: 从旧的一串字符串中从头或者从尾取数,排列成一个新串,使得新串的字典序最小。 解题思路: 很明显,这是一个贪心,用了暴力求解。 标记两个数,l 和 r 分别表示头和尾的下标。如果头部的字典序小,那么输出头部的,如果尾部的字典序小,那么输出尾部的。如果他们两个是相同的字符,那么继续往下找,直到找到第一个不相等的,或者头下标大于等于尾下标(此时,说明字符串对称,随便输出一个),输出字

POJ3278 Catch That Cow(BFS) 坑爹的RE

Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Description Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N

USACO Training 4.2.3 Job Processing 工序安排 题解与分析

Job Processing 工序安排 IOI'96 描述 一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B。每个操作只有一些机器能够完成。 上图显示了按照下述方式工作的流水线的组织形式。A型机器从输入库接受工件,对其施加操作A,得到的中间产品存放在缓冲库。B型机器从缓冲库接受中间产品,对其施加操作B,得到的最终产品存放在输出库。所有的机器平行并且独立地工作,每个库的容量