http://acm.hdu.edu.cn/showproblem.php?pid=1297
分析过程:
设:F(n)表示n个人的合法队列,则:
按照最后一个人的性别分析,他要么是男,要么是女,所以可以分两大类讨论:
1、如果n个人的合法队列的最后一个人是男,则对前面n-1个人的队列没有任何限制,他只要站在最后即可,所以,这种情况一共有F(n-1);
2、如果n个人的合法队列的最后一个人是女,则要求队列的第n-1个人务必也是女生,这就是说,限定了最后两个人必须都是女生,这又可以分两种情况;
2.1、如果队列的前n-2个人是合法的队列,则显然后面再加两个女生,也一定是合法的,这种情况有F(n-2);
2.2、但是,难点在于,即使前面n-2个人不是合法的队列,加上两个女生也有可能是合法的,当然,这种长度为n-2的不合法队列,不合法的地方必须是尾巴,就是说,这里说的长度是n-2的不合法串的形式必须是“F(n-4)+男+女”,这种情况一共有F(n-4).
所以,通过以上的分析,可以得到递推的通项公式: F(n)=F(n-1)+F(n-2)+F(n-4) (n>3)然后就是对n<=3 的一些特殊情况的处理了,显然:F(0)=1 (没有人也是合法的,这个可以特殊处理,就像0的阶乘定义为1一样) F(1)=1 F(2)=2 F(3)=4
F(n)=F(n-1)+F(n-2)+F(n-4)
由于题干中要求1<=n<=1000,所以用double也不能存储结果,这样就变成大数问题啦(n=1000时,计算之后大概有245位数)
可以用二维数组,代码如下;
#include <stdio.h>
//二维数组--f[n][0]记录位数
int f[1002][500]={
{0},
{1,1},
{1,2},
{1,4},
{1,7}
};
int main()
{
int i,j,T;
int weishu;
for (i=5; i<=1000; i++) {
weishu = f[i-1][0];//获取f[n-1][0]所表示的位数
for (j=1; j<weishu+1; j++) // 对应的位数相加
f[i][j] = f[i-1][j] + f[i-2][j]+ f[i-4][j];
for (j=1; j<weishu+1; j++) // 进位
{
f[i][j+1] += f[i][j] / 10; // 进位
f[i][j] %= 10; // 进位后的余数
}
//更新最新位数
f[i][0] = weishu;
if (f[i][weishu+1]!=0) {
f[i][0]+=1;
}
}
while (scanf("%d",&T)!=EOF) {
for (i=f[T][0]; i>0 ; i--) {
printf("%d",f[T][i]);
}
printf("\n");
}
return 0;
}
分享到:
相关推荐
### ACM8625S-2X40W-内置DSP-中文规格书V1.0.pdf 知识点解析 #### 一、产品概述 ACM8625S是一款高集成度、高效率的立体声数字输入D类音频放大器。该设备集成了先进的DSP音效处理算法,适用于各种便携式及固定式音频...
此外,用户可以调整DSP控制,如采样频率(默认为48kHz),静音/取消静音操作,以及选择SDOUT(DSP前或后)的I2S数据输出。Mute和Unmute按钮用于控制音频输出,而ACM8625的SDOUT引脚默认配置为DSP后数据。 在Class D...
【标题】"acm试题答案acm" 涉及的主要知识点是ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest,简称ICPC或ACM/ICPC)的解题策略与技巧,以及如何寻找和理解比赛题目答案。ACM是一项...
ACM PRO ACM PROACM PRO ACM PROACM PRO ACM PRO
### ACM程序设计基础知识点 #### 一、ACM竞赛概览 - **组织机构与活动**: 本课程由东北林业大学陈宇老师负责,通过邮箱Lg_chenyu@yahoo.com.cn进行联系。课程的主要目的是介绍ACM程序设计的基础概念及入门技巧。 - ...
ACM(Association for Computing Machinery)程序设计大赛是全球范围内一项极具影响力和权威性的大学生编程竞赛,由美国计算机协会(ACM)主办。国际大学生程序设计竞赛(ICPC,International Collegiate ...
6. **字符串处理**:KMP算法、Manacher's Algorithm、后缀自动机等用于字符串匹配,Z函数、Rabin-Karp滚动哈希用于文本查找。 7. **编码技巧**:IO优化(如scanf/printf代替cin/cout)、预处理宏、位操作等,提升...
标题中的"CDC-ACM.rar_CDC-ACM_V2 _cdc acm"指的是一个针对Linux操作系统的USB抽象控制模型(CDC-ACM)驱动程序的更新版本V2.13.6。这个驱动程序专门用于支持USB调制解调器和ISDN适配器,使得这些设备能够在Linux...
【标题】"ACM.rar" 是一个压缩文件,其中包含了与 ACM(国际大学生程序设计竞赛,简称ACM)相关的学习资料。"ACM_ACM Hwang .p" 暗示了这个压缩包可能包含由 ACM 专家 Hwang 教授的一些教程或讲义,这些材料通常对...
"acmacm经典题库"是一个专门为ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)参赛者准备的学习资源集合。ACM竞赛是全球范围内影响力极大的编程比赛,旨在提升大学生的算法设计、问题...
ACM练习建议 ACM练习建议 ACM练习建议
《浙大ACM竞赛编程资源解析》 在编程竞赛领域,特别是ACM(国际大学生程序设计竞赛)中,浙江大学的在线判题系统——浙大ACM(acm.zju.edu.cn),也被称为浙大OJ(Online Judge)网站,是众多参赛者磨练技艺的重要...
ACM 模板详解 ACM(Association for Computing Machinery)模板是指一类用于记录算法竞赛代码的模板,通常包含了数据结构、算法、数学公式等多方面的知识点。本文将对 ACM 模板的结构和内容进行详细的解释,并对...
在IT领域,ACM(Abstract Control Module)串口驱动是一种重要的接口技术,它允许通过USB(Universal Serial Bus)连接来模拟传统的串行通信接口。在本文中,我们将深入探讨高通和MTK平台上的ACM串口驱动以及如何...
在Java编程领域,ACM(Association for Computing Machinery)常常与算法竞赛相关,因为ACM国际大学生程序设计竞赛(ICPC)广泛使用Java作为比赛语言之一。"acm.jar" 文件通常包含了一些为这类竞赛设计的预封装的...
深度优先遍历 搜索算法 ACM PKU 1011 S.doc
ACM面试题解析 从给定的文件中,我们可以总结出四个不同的问题,每个问题都有其独特的解决方案和要点。 试题一:青蛙相遇问题 该问题的核心是判断两只青蛙是否能够相遇,并计算出它们相遇所需要的跳跃次数。为了...
《ACM培训资料详解》 ACM,全称是International Collegiate Programming Contest(国际大学生程序设计竞赛),是一项全球范围内的高水平计算机科学竞赛,旨在提升大学生的算法设计、问题解决和编程能力。本压缩包...
ACM(American Computer Science League)是一个致力于计算机科学教育和竞赛的组织,特别是为学生提供算法竞赛的机会。在编程竞赛中,ACM jar包通常包含了用于运行和评测参赛者代码的库,这些库提供了输入/输出处理...
ACM 中常用的 STL STL(Standard Template Library,标准模板库)是 C++ 程序设计语言的标准库之一,提供了多种常用的数据结构和算法,以提高编程效率和代码复用性。下面将对常用的 STL 进行介绍,包括 vector、set...