FZU 2098 刻苦的小芳(卡特兰数,动态规划)
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 刻苦的小芳(卡特兰数,动态规划)的更多相关文章
- FZU	2098 刻苦的小芳
		
这个问题转化一下就是求长度为2*n的正确括号匹配串,两个匹配的括号之间的距离不超过2*k的有几种. 假设左括号为1,右括号为-1,dp[i][j]表示长度为i的括号匹配串,前缀和为j的有几种.dp[2 ...
 - FZU 1064 教授的测试(卡特兰数,递归)
		
Problem 1064 教授的测试 Accept: 149 Submit: 364 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Des ...
 - 2019牛客暑期多校训练营(第一场)E	ABBA (DP/卡特兰数)
		
传送门 知识点:卡特兰数/动态规划 法一:动态规划 由题意易知字符串的任何一个前缀都满足\(cnt(A) - cnt(B) \le n , cnt(B)-cnt(A)\le m\) \(d[i][j] ...
 - HDU  2067  小兔的棋盘 (卡特兰数)
		
小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
 - hdu2067 小兔的棋盘 DP/数学/卡特兰数
		
棋盘的一角走到另一角并且不越过对角线,卡特兰数,数据量小,可以当做dp求路径数 #include<stdio.h> ][]; int main() { ; ) { int i,j; lon ...
 - 卡特兰数(Catalan)
		
卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, ...
 - HDU-4828 卡特兰数+带模除法
		
题意:给定2行n列的长方形,然后把1—2*n的数字填进方格内,保证每一行,每一列都是递增序列,求有几种放置方法,对1000000007取余: 思路:本来想用组合数找规律,但是找不出来,搜题解是卡特兰数 ...
 - 卡特兰数(Catalan)简介
		
Catalan序列是一个整数序列,其通项公式是 h(n)=C(2n,n)/(n+1) (n=0,1,2,...) 其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, ...
 - 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
		
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
 
随机推荐
- 第三百一十一节,Django框架,Form表单验证
			
第三百一十一节,Django框架,Form表单验证 表单提交 html <!DOCTYPE html> <html lang="en"> <head& ...
 - 创建以API为中心的Web应用(转)
			
英文原文:Creating an API-Centric Web Application 引言 API——API是Application Programming Interface(应用编程接口)的简 ...
 - linux -- 常用的20个命令
			
1. ls命令 ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. root@tecmint:~# ls Andr ...
 - jquery -- 删除节点
			
jQuery提供了三种删除节点的方法,即remove(),detach()和empty(). 测试所用HTML代码: <p title="选择你最喜欢的水果?">你最喜 ...
 - docker和kubernetes docker的区别
			
之前公司的测试环境,刚开始自己搭建虚拟机,然后安装redis,nginx,mq,mysql,tomcat,jdk,marven,还有jekins.前面些还算好点,jekins还是比较麻烦的.然后搭完以 ...
 - Canny边缘检测——学习笔记
			
Sobel Canny 非极大值抑制NMS,上表为角度,下表为灰度 26度,在0-45°之间,离45°更近. 把不是极大值的点改为0,这样边缘会细很多. 双阈值判定 深度优先遍历
 - linux mint 19解决 输入法问题
			
安装搜狗后出现 You're currently running Fcitx with GUI, but fcitx-configtool couldn't be found, the package ...
 - linux复制文件到指定的文件夹
			
copy命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指 ...
 - iOS - UITableView滚动到指定的cell并且选中
			
UITableView //项目中遇到的 - (void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)a ...
 - Kconfig和Makefile的修改
			
Kconfig文件的作用 内核源码树的目录下都有两个文件Kconfig(2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconf ...