当前位置: 首页 > article >正文

gesp(C++六级)(7)洛谷:P10376:[GESP202403 六级] 游戏

gesp(C++六级)(7)洛谷:P10376:[GESP202403 六级] 游戏

在这里插入图片描述

题目描述

你有四个正整数 n , a , b , c n,a,b,c n,a,b,c,并准备用它们玩一个简单的小游戏。

在一轮游戏操作中,你可以选择将 n n n 减去 a a a,或是将 n n n 减去 b b b。游戏将会进行多轮操作,直到当 n ≤ c n \leq c nc 时游戏结束。

你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作序列不同,当且仅当游戏操作轮数不同,或是某一轮游戏操作中,一种操作序列选择将 n n n 减去 a a a,而另一种操作序列选择将 n n n 减去 b b b。如果 a = b a=b a=b,也认为将 n n n 减去 a a a 与将 n n n 减去 b b b 是不同的操作。

由于答案可能很大,你只需要求出答案对 1 0 9 + 7 10^9 + 7 109+7 取模的结果。

输入格式

一行四个整数 n , a , b , c n,a,b,c n,a,b,c

输出格式

输出一行一个整数表示答案。

样例 #1

样例输入 #1

1 1 1 1

样例输出 #1

1

样例 #2

样例输入 #2

114 51 4 1

样例输出 #2

176

样例 #3

样例输入 #3

114514 191 9 810

样例输出 #3

384178446

提示

数据规模与约定

  • 20 % 20\% 20% 的数据, a = b = c = 1 a=b=c=1 a=b=c=1 n ≤ 30 n \leq 30 n30
  • 40 % 40\% 40% 的数据, c = 1 c = 1 c=1 n ≤ 1 0 3 n \leq 10^3 n103
  • 对全部的测试数据,保证 1 ≤ a , b , c ≤ n ≤ 2 × 1 0 5 1 \leq a,b,c \leq n \leq 2 \times 10^5 1a,b,cn2×105

AC代码(100分)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
/*思路2: 
	动态规划:
	dp[i]含义:当n=i的方案数
	状态转移方程:
		当i<=c时,dp[i]=1; 
	    当i>c时,dp[i]=dp[i-a]+dp[i-b]	
*/
ll n,a,b,c;//注意开long long 
ll dp[200010];//dp数组 
const int N=1e9+7; 
int main(){
	cin>>n>>a>>b>>c;
	//特判
	if(n<=c){
		cout<<1;
		return 0;
	} 
	//递推
	for(int i=0;i<=c;i++) dp[i]=1;
	for(int i=c+1;i<=n;i++){
//		dp[i]=(dp[i-a]%N+dp[i-b]%N)%N;//对比:注意这种写法没有考虑i-a和i-b可能为负数
		dp[i]=(dp[max(i-a,0ll)]%N+dp[max(i-b,0ll)]%N)%N;
	} 
	//输出答案
	cout<<dp[n]; 
	return 0;
}

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容


http://www.kler.cn/a/526430.html

相关文章:

  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础组件实现)
  • 网站快速收录:利用新闻源的优势
  • AI在自动化测试中的伦理挑战
  • 单片机基础模块学习——超声波传感器
  • Day29(补)-【AI思考】-精准突围策略——从“时间贫困“到“效率自由“的逆袭方案
  • 论文阅读(九):通过概率图模型建立连锁不平衡模型和进行关联研究:最新进展访问之旅
  • 范冰冰担任第75届柏林电影节主竞赛单元评委 共鉴电影佳作
  • CF1098F Ж-function
  • F. Ira and Flamenco
  • 智慧园区系统助力企业智能化升级实现管理效率与安全性全方位提升
  • B站吴恩达机器学习笔记
  • C++11之列表初始化
  • 不够专业,想更体系化
  • 【视频+图文详解】HTML基础4-html标签的基本使用
  • 2025美赛复盘总结反思(论文手)
  • 第27篇:Python开发进阶:python多线程与多进程编程
  • [LeetCode]day 5 209.长度最小的子数组
  • EWM 变更库存类型
  • Leetcode 3434. Maximum Frequency After Subarray Operation
  • 剑指 Offer II 012. 左右两边子数组的和相等
  • C++初阶 -- 泛型编程(函数模板、类模板)入门
  • Brave132 编译指南 Windows 篇:安装 Visual Studio 2022(二)
  • QT串口通信,实现单个温湿度传感器数据的采集
  • 【初识C语言】作业讲解15课
  • MATLAB语言的测试开发
  • sem_wait的概念和使用案列