您的位置:首页 > 产品设计 > UI/UE

hdu 2064 Queuing (递推)

2015-08-20 22:21 656 查看
原理连接: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]
;		//节省内存所以 一维数字-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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: