1 条题解
-
0
【题目大意】给定四个整数,每次可以执行操作 或,直到,求方案数模 + 7 的结果。
【考纲知识点】动态规划
【解题思路】
这道题因为*所以就很自然的想到一种线性 DP 策略:
从枚举到 将 转移到 和 中 ,状态转移方程就是
最后还要注意 和 为负数的情况还有非常重要的一点,需要取模。
【参考程序】
#include <bits/stdc++.h> using namespace std; const int mod = 1e9 + 7; int n, a, b, c, dp[200005]; int main() { cin >> n >> a >> b >> c; dp[n] = 1; // 初始化 for (int i = n; i > c; i--) { if (i - a <= c) // 避免负数情况,将小于等于 c 的 i-a 和 i-b 全部存进 c 中 { dp[c] = (dp[c] + dp[i]) % mod; } else { dp[i - a] = (dp[i - a] + dp[i]) % mod; } if (i - b <= c) { dp[c] = (dp[c] + dp[i]) % mod; } else { dp[i - b] = (dp[i - b] + dp[i]) % mod; } } cout << dp[c]; return 0; }
- 1
信息
- ID
- 650
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 16
- 已通过
- 7
- 上传者