题目描述
你有四个正整数 ,并准备用它们玩一个简单的小游戏。
在一轮游戏操作中,你可以选择将  减去 
,或是将 
 减去 
 。游戏将会进行多轮操作,直到当
 时游戏结束。 你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作序列不同,当且仅当游戏操作轮数不同,或是某 一轮游戏操作中,一种操作序列选择将 
 减去 
,而另一种操作序列选择将 
 减去 
。如果 
,也认为将 
 减去 
 与将 
 减去 
 是不同的操作。 由于答案可能很大,你只需要求出答案对 
 取模的结果。
输入格式
一行四个正整数 。保证 
。
输出格式
一行一个整数,表示不同的游戏操作序列数量对  取模的结果。
样例输入#1
1 1 1 1样例输出#1
1样例输入#2
114 51 4 1样例输出#2
176样例输入#3
114514 191 9 810
样例输出#3
384178446思路
因为是有很多分支,为了减少时间复杂度,我们优先选用动态规划,当然也可以用递推,转移方程应该不用多说了吧,  加上 
 的和再去mod 
。
参考代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;const int N = 2e5 + 5;
const int mod = 1e9 + 7;int dp[N];int main()
{/*ios::sync_with_stdio(0);cin.tie(0);*/int n, a, b, c;cin >> n >> a >> b >> c;for(int i = 0; i <= n; i++){if(i <= c)dp[i] = 1;elsedp[i] = (dp[max(0, i - a)] + dp[max(0, i - b)]) % mod;  }cout << dp[n];return 0;
}制作不易,喜欢的话点个关注+赞+收藏,感谢你们的支持!