hdu 2064 Queuing (递推)

原理连接:http://acm.hdu.edu.cn/showproblem.php?pid=2604


题目大意:含有fmf或者fff的队列称为O类型队列。其余为E类型队列。

求 E类型队列的数量  对 给定值M 取余。

递推公式:

F(n)=F(n-1)+F(n-3)+F(n-4)


在保证不重复且满足的条件的情况下,(自己可通过排除的方法得到以下)

F(n-1) 末尾为   m

F(n-3) 末尾为   mmf

F(n-4) 末尾为   mmff

从而得出递推公式。


还需要注意点,数组用char类型否则超内存,short int也不行。

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;

const int N = 1000000 + 1;
char dt[30][N];		//节省内存所以 一维数字-1 为 对应 M的取余

int main()
{
	for (int i = 1; i <= 30; i++)
	{
		dt[i-1][1] = 2 % i;
		dt[i-1][2] = 4 % i;
		dt[i-1][3] = 6 % i;
		dt[i-1][4] = 9 % i;
		for (int j = 5; j <= 1000000; j++)
		{
			dt[i-1][j] = (dt[i-1][j - 1] + dt[i-1][j - 3] + dt[i-1][j - 4])%i;
		}
	}
	int L,M;
	while (scanf_s("%d%d", &L, &M) == 2)
	{
		printf("%d\n", dt[M-1][L]);		
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值