波动数列(组合DP变形)
DP 组合 数列 变形 波动
2023-09-14 09:01:26 时间
观察这个数列:
1 3 0 2 -1 1 -2 …
这个数列中后一项总是比前一项增加2或者减少3,且每一项都为整数。
栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加 a 或者减少 b 的整数数列可能有多少种呢?
输入格式
共一行,包含四个整数 n,s,a,b,含义如前面所述。
输出格式
共一行,包含一个整数,表示满足条件的方案数。
由于这个数很大,请输出方案数除以 100000007 的余数。
数据范围
1≤n≤1000,
−109≤s≤109,
1≤a,b≤106
输入样例:
4 10 2 3
输出样例:
2
样例解释
两个满足条件的数列分别是2 4 1 3和7 4 1 -2。
n,s,a,b = list(map(int,input().strip().split()))
f= [[0 for i in range(1010)] for i in range(1010)] # f[i][j] 代表所有前i个数 总和%mod == j的集合
mod = 100000007
f[0][0] = 1 # 不取数的情况下
for i in range(1,n+1):
for j in range(n):
f[i][j] = (f[i-1][(j-(n-i)*a)%n] % mod + f[i-1][(j+(n-i)*b)%n]) % mod
print(f[n-1][s%n]) # n-1个数的组合,排除了第一个数
相关文章
- hdu1028 Ignatius and the Princess III(递归、DP)
- Java实现 LeetCode 826 安排工作以达到最大收益(暴力DP)
- Java实现 蓝桥杯 算法提高VIP 摆花 dp 记忆搜索 2种做法 多重背包
- ZOJ 2625 Rearrange Them(DP)
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-dp练习2
- Ural 1260 A nudnik photographer(DP)
- 1671. 得到山形数组的最少删除次数-c语言dp算法加前序后序遍历求解-双百代码
- [hihocoder 1033]交错和 数位dp/记忆化搜索
- HDU 4521 小明系列问题——小明序列 (线段树维护DP)
- POJ 2151 Check the difficulty of problems (动态规划-可能DP)
- UVa 12683 Odd and Even Zeroes(数论+数字DP)
- 力扣-dp基础问题思维构建
- 刷题记录:洛谷P8806 [蓝桥杯 2022 国 B] 搬砖 条件排序dp