题目背景

盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。

按售票处规定,每位购票者限购一张门票,且每张票售价为50元。在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值100元的钱币。假设售票处在开始售票时没有零钱。试问这2N个球迷有多少种排队方式可使售票处不致出现找不出钱的尴尬局面。

题目描述

例如当n=2是,用A表示手持50元面值的球迷,用B表示手持100元钱的球迷。则最多可以得到以下两组不同的排队方式,使售票员不至于找不出钱。

第一种:A A B B

第二种:A B A B

[编程任务]

对于给定的n (0≤n≤20),计算2N个球迷有多少种排队方式,可以使售票处不至于找不出钱。

输入输出格式

输入格式:

一个整数,代表N的值

输出格式:

一个整数,表示方案数

输入输出样例

输入样例#1:

2

输出样例#1:

2

说明

必开QWORD

测试:N=15

回溯:1秒(超时)

模拟栈:大于10分钟

递归算法:1秒(超时)

动态规划:0 MS

组合算法:16 MS

题意:每个100元来之前必须有一个没走的50元,然后一起原地消失,让人想起了括号匹配

这道题目给出的方向已经很明确了(说明都给你测试了)

很显然,可行的操作只有动规和组合算法。

但是!不信邪的摸鱼酱用没有回溯的DFS跑了一遍感觉还行,20组数组超时了4组(17,18,19,20)

代码:

#include<bits/stdc++.h>
using namespace std;
int n,cnt;
void dfs(int a,int b,int step)
{
if(b<a)return;
if(a<0||b<0)return;
if(step==2*n)
{
cnt++;
return;
}
dfs(a-1,b,step+1);
if(b>=a)dfs(a,b-1,step+1);
}
int main()
{
cin>>n;
dfs(n,n,0);
cout<<cnt<<endl;
return 0;
}

思路很清晰,来50的或者来100的,不符合情况直接return,代码也很简单。

但是终究是A不了啊!

倔强的摸鱼酱依然没有考虑给出的那两种可行方法

自学了卡特兰数,立志用膜法打败膜法 。

用到了上面链接那篇博客的公式②,想了解的可以去看一下。

代码没想到比DFS还要简单...

DFS 21行,这个只有11行

极简代码:

#include<bits/stdc++.h>
using namespace std;
long long h[20+2]={1,1},n;
int main()
{
cin>>n;
for(int i=2;i<=n;i++)
h[i]=h[i-1]*(4*i-2)/(i+1);
cout<<h[n]<<endl;
return 0;
}

ov.

【题解】球迷购票问题-C++的更多相关文章

  1. 洛谷——P1754 球迷购票问题

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  2. P1754 球迷购票问题

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  3. 【洛谷】P1754 球迷购票问题(基础dp)

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  4. P1754 球迷购票问题 (卡特兰数,递推)

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  5. 洛谷 P1754 球迷购票问题

    P1754 球迷购票问题 题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的 ...

  6. luogu P1754 球迷购票问题

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  7. 【洛谷P1754 球迷购票问题】题解

    传送门 卡特兰数经典 \(\texttt{AB}\) 分拆问题. 分析: 题意相当于排列 \(n\) 个 \(\texttt A\) 和 \(n\) 个 \(\texttt B\),使得相邻 \(\t ...

  8. P1754球迷购票问题

    这是一道动态规划题,其实也是个数论题. 有n人拿50,有n人拿100买票,必须让50元的人买,不然无法找零钱,问最多有几种方案可以每一次都买票成功.这个题首先令人想到搜索,但是随即发现dp是正解,于是 ...

  9. Luogu P1754球迷购票问题【dp/卡特兰数】By cellur925

    题目传送门 虽然是水dp,但我感到还是有些无从下手== f[i][j]表示还剩i个50元没考虑,j个100元没考虑的方案数,可有转移f[i][j]=f[i-1][j]+f[i][j-1] 但其实它也可 ...

随机推荐

  1. Python selenium常用用法

    1.获取当前页面的Url 方法:current_url 实例:driver.current_url 2.获取元素坐标 方法:location 解释:首先查找到你要获取元素的,然后调用location方 ...

  2. java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast

    解决方案 在配置文件中配置proxy-target-class="true" <aop:aspectj-autoproxy proxy-target-class=" ...

  3. HTTP协议探究(五):H2中一些重要的概念

    一 复习与目标 1 复习 简单密码学.对称加密与非对称加密 数字签名.数字证书 SSL/TLS HTTPS = HTTP + SSL/TLS,SSL/TLS为HTTP提供了保密性.完整性和鉴别性 2 ...

  4. linux 用户切换组

    问题: 因为默认的的网站路径 /var/www/html 是root 用户 root组的, 想要修改什么的需要用sudo 很麻烦. 解决: 将当前用户 hehecat加入至root组,使之有权限对目录 ...

  5. POJ2503(Babelfish)--简单字典树

    思路:就是用一个字典树翻译单词的问题,我们用题目中给出的看不懂的那些单词建树,这样到每个单词的叶子结点中存放原来对应的单词就好. 这样查询到某个单词时输出叶子结点存的就行,查不到就"en&q ...

  6. 服务器去掉IE浏览器网络安全限制

  7. c#模拟鼠标左键单击

    [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern int mouse_e ...

  8. Marketing Cloud的contact merge机制

    Marketing Cloud的contact支持多种多样的数据源,如下图所示: SAP Hybris Commerce SAP ERP SAP Cloud for Customer SAP Gigy ...

  9. python自定义小工具:密码匿名化、毫秒时间显示、人类易读字节

    import base64 import time def timestamp2datems(timestamp): ''' 时间戳转为日期字串,精确到ms.单位s :param timestamp: ...

  10. 【python】python3连接mysql数据库

    一.安装pymysql 详见http://www.runoob.com/python3/python3-mysql.html 二.连接mysql数据库 db = pymysql.connect( #连 ...