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 ...
随机推荐
- C++类的成员函数的形参列表后面的const
看到(C++ Primer)类的成员函数这里,突然对成员函数形参列表后面的const感到迷惑. 因为书中开始说是修饰隐含形参this的,然后又说是声明该函数是只读的. 大为不解! 翻资料.找人讨论.. ...
- Intellij IDEA 使用学习
Intellij中名词解释: Project,就是一个完整的项目,类似Eclipse中的WorkSet(虽然WorkSet是人为归类的). Module,是Project中的模块,类似Eclipse中 ...
- k-means算法及matlab实现
K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢? ...
- Linux Source命令及脚本的执行方式解析(转)
当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录:这时就想到用source命令,如:source /etc/profile对source进行了学习,并且用它与sh 执行脚本进行 ...
- vncserver的安装和使用
环境:RedHat Linux 6企业版.Xwindows:gnome (红帽默认安装的图形界面) 尽管我们可以使用SSH连接远程通过字符界面来操作Linux,但是对于更多熟悉图形人来说是很不方便的, ...
- 【Java面试题】7 构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload. Constructor不能被继承,所以Constructor也就不能被override.每一个类必 ...
- 在 SharePoint 2010 打开网页出错时,显示实际的错误信息
每次打开错误页面时,SharePoint出错显示的都是友好信息“发生意外错误”,而且友好到您基本上无法明白到底出什么错,怎么办? 修改Web.config文件配置就可以了,就可以显示更详细的信息: 1 ...
- H5 readfile 多图片预览
/** * 多图片前端预览 * @author Tiac */ function preView(_this, offset){ let max_nums = 10;//单位 s let max_si ...
- linux 安装 nodejs
原文地址:https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora 1)定位到nodejs的官方源(如果直 ...
- 设置MySQL的字符编码
前言 这里我已经将MySQL的数据库编码设置为UTF-8,所以下面现实的都是UTF-8. 设置MySQL数据库的编码方式有三种,分别是基于session会话的.基于全局gloable的.永久性改变的. ...