本文主要是介绍HDU 1297 Children’s Queue,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1297
题解:
D[n]表示有n个人时,满足排队要求的个数。
分类讨论:
1.第n个人为男生时,满足排队要求的个数等于D[n-1].
2.第n个人为女生时,第n-1个必为女生,才满足要求。
此处还要进行一次分类:
a.前n-2个满足排队要求时,个数为D[n-2].
b.前n-2个不满足排队要求时,第n-2个只能是女生,第n-3个只能是男生,则个数为D[n-4]。
得到递推式:D[n]=D[n-1]+D[n-2]+D[n-4]
此题数据较大,当n=1000时,据说有2百多位(度娘说的),我测了下有245位。
可以开个二维数组a[1001][251].
代码:
#include<stdio.h>
int a[1001][251]={0};
int main()
{int n;a[1][250]=1,a[2][250]=2,a[3][250]=4,a[4][250]=7;while(scanf("%d",&n)!=EOF){int i,j;for(i=5;i<=n;i++){int temp=0;for(j=250;j>=0;j--){temp=temp+a[i-1][j]+a[i-2][j]+a[i-4][j];a[i][j]=temp%10;temp=temp/10;}}for(j=0;j<=250;j++){if(a[n][j]!=0)break;}for(i=j;i<=250;i++){printf("%d",a[n][i]);}printf("\n");}return 0;}
这篇关于HDU 1297 Children’s Queue的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!