GESP编程共123题,本题是整站第1404题,已经有人完成了本题,加油!
你有四个正整数 n,a,b,c,并准备用它们玩一个简单的小游戏。
在一轮游戏操作中,你可以选择将 n 减去 a,或是将 n 减去 b。游戏将会进行多轮操作,直到当 n≤c 时游戏结束。
你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作序列不同,当且仅当游戏操作轮数不同,或是某一轮游戏操作中,一种操作序列选择将 n 减去 a,而另一种操作序列选择将 n 减去 b。如果 a=b,也认为将 n 减去 a 与将 n 减去 b 是不同的操作。
由于答案可能很大,你只需要求出答案对 10^9+7 取模的结果。
一行四个整数 n,a,b,c。
输出一行一个整数表示答案。
输入 #1
1 1 1 1
输出 #1
1
输入 #2
114 51 4 1
输出 #2
176
输入 #3
114514 191 9 810
输出 #3
384178446
【题目大意】给定一个数n,每次操作可以减去a或者b,最后使得结果小于等于c,问不同的操作的序列个数。
【考纲知识点】一维动态规划
【解题思路】可以定义f[i]为在游戏中出现i这个数字时不同的操作序列个数。有:
递推式:f[i] = f[i+a] + f[i+b]。
边界条件:f[n] = 1。
答案:f[c] + f[c-1] + f[c-2] + ... + f[c-b+1]。
由于答案中的下标可能会出现负数,在代码实现时可以将数组改为map或者将数组下标整体调大(可以看一下参考程序,参考程序中的f[N+i]可以和思路内的f[i]对应)
【参考程序】
本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。