Problem 2098 刻苦的小芳

Accept: 42 Submit: 70

Time Limit: 1000 mSec Memory Limit : 32768 KB

Problem Description

小芳是一个努力用功的好孩子。快高考了,她正在努力备战中。她要完成n份作业,然后把完成的作业堆成老高的一堆。为了保证学习的效率,她总是在一份作业写完后还会回过头去复习一下。因此她总是在写完几份作业就从已写完的作业堆中从上到下拿几本来复习,要知道如果不这么做的话把作业弄乱就麻烦了。另外,她还发现,如果她的书叠得太高了就会因为重心不稳而倒下,所以她必须保证她叠的书不能超过k份。在写完作业休息之余,她看了那些作业,突然想到了一个问题。她想知道她这么复习将可能多少种复习的顺序。为了解答这个问题,于是她特地来请教学过的你来回答。你能帮她吗?

Input

输入有多组case(<=20)。每组case有一行,有两个数n,k,分别表示作业总数和书可以叠的最大数量。n和k均为小于100的非负数。

Output

对于每个询问,输出Case 例子序号: 顺序的种类数。具体详见例子。 答案对10^9+7取模。

Sample Input

5 2

5 5

5 8

6 2

0 1

3 0

Sample Output

Case 1: 16

Case 2: 42

Case 3: 42

Case 4: 32

Case 5: 1

Case 6: 0

卡特兰数的应用,对栈的高度有限制,可以用简单动态规划

关于卡特兰数的应用总结,给一篇博文吧

http://blog.csdn.net/dacc123/article/details/50922138

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h> using namespace std;
const int mod=1e9+7;
int f[105][105];//表示i个数,放到长度限制为j的栈里,出栈的顺序有多少种
int n,m;
int cas=0;
void fun2()
{
memset(f,0,sizeof(f));
f[0][0]=1;
for(int i=1;i<=n;i++)
{
int sum=0;
for(int j=m;j>=0;j--)
{
(sum+=f[i-1][j])%=mod;
f[i][j+1]=sum;
}
}
int ans=0;
for(int i=0;i<=m;i++)
(ans+=f[n][i])%=mod;
printf("Case %d: %d\n",++cas,ans);
}
int main()
{
cas=0;
while(scanf("%d%d",&n,&m)!=EOF)
{ fun2(); }
return 0;
}

也可以用括号匹配来做

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h> using namespace std;
const int mod=1e9+7;
long long int dp[205][205];//表示i个括号,前缀和为j的组合
int f[105][105];//表示i个数,放到长度限制为j的栈里,出栈的顺序有多少种
int n,m;
void fun1()
{
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=1;i<=2*n;i++)
{
for(int j=0;j<=m;j++)
{
if(j+1<=m) dp[i][j]=(dp[i][j]+dp[i-1][j+1])%mod;
if(j-1>=0) dp[i][j]=(dp[i][j]+dp[i-1][j-1])%mod;
}
}
}
int main()
{
int cas=0;
while(scanf("%d%d",&n,&m)!=EOF)
{
fun1();
printf("Case %d: %lld\n",++cas,dp[2*n][0]);
}
return 0;
}

FZU 2098 刻苦的小芳(卡特兰数,动态规划)的更多相关文章

  1. FZU 2098 刻苦的小芳

    这个问题转化一下就是求长度为2*n的正确括号匹配串,两个匹配的括号之间的距离不超过2*k的有几种. 假设左括号为1,右括号为-1,dp[i][j]表示长度为i的括号匹配串,前缀和为j的有几种.dp[2 ...

  2. FZU 1064 教授的测试(卡特兰数,递归)

    Problem 1064 教授的测试 Accept: 149 Submit: 364 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Des ...

  3. 2019牛客暑期多校训练营(第一场)E ABBA (DP/卡特兰数)

    传送门 知识点:卡特兰数/动态规划 法一:动态规划 由题意易知字符串的任何一个前缀都满足\(cnt(A) - cnt(B) \le n , cnt(B)-cnt(A)\le m\) \(d[i][j] ...

  4. HDU 2067 小兔的棋盘 (卡特兰数)

    小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. hdu2067 小兔的棋盘 DP/数学/卡特兰数

    棋盘的一角走到另一角并且不越过对角线,卡特兰数,数据量小,可以当做dp求路径数 #include<stdio.h> ][]; int main() { ; ) { int i,j; lon ...

  6. 卡特兰数(Catalan)

    卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, ...

  7. HDU-4828 卡特兰数+带模除法

    题意:给定2行n列的长方形,然后把1—2*n的数字填进方格内,保证每一行,每一列都是递增序列,求有几种放置方法,对1000000007取余: 思路:本来想用组合数找规律,但是找不出来,搜题解是卡特兰数 ...

  8. 卡特兰数(Catalan)简介

    Catalan序列是一个整数序列,其通项公式是 h(n)=C(2n,n)/(n+1) (n=0,1,2,...) 其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, ...

  9. 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

随机推荐

  1. motion的移植和使用

    说明: motion主页:http://www.lavrsen.dk/foswiki/bin/view/Motion motion下载地址:http://sourceforge.net/project ...

  2. samtools flags 的含义

    对于双端比对的数据,生成的BAM文件中,R1端序列和R2端序列的标识符是一样的,之前一直不知道如何根据bam文件区分哪条序列是R1端,哪条序列是R2端,昨天仔细研究了一下,原来代表R1端和R2端的信息 ...

  3. 第一个OC程序

    第一个OC程序源码如下: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @auto ...

  4. React中props与state

    以下内容均为个人理解. 1.state: 在react中,state可以看成管理页面状态的集合(实则一个对象而已),库里面的成员均为页面渲染变量,整个页面为一个状态机,当state发生变化时,页面会重 ...

  5. SharePoint Server 2013 通过IP无法访问站点

    通过IP访问SharePoint站点,出现“The Web application at http://172.21.19.132:1000 could not be found.... ”如下错误: ...

  6. python中 decimal不能直接应用于float数据

    今天将程序部署到linux服务器上,出现很奇怪的现象. 在windows上运行正常的decimal,到了linux环境下不能正常运行,报出下面的错误. 代码为: income = get_dashbo ...

  7. Java精选笔记_JDBC

    JDBC 概述 什么是JDBC JDBC全称是Java数据库连接(Java Database Connectivity),应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据 ...

  8. css揭秘读书笔记

    currentColor属性让hr和段落相同的颜色: div { color: red; } hr { background: currentColor; /* 一定要设置高度*/ height: 0 ...

  9. sql 链接符 ||

  10. Python 循环退出

    常用语句: break :退出整个循环,循环外的语句继续执行continue :退出本次循环,继续下一次循环pass :什么也不做,相当于在这里占个位置,以便以后修改代码sys.exit() :直接退 ...