0-1背包问题(动态规划)附例题讲解——c++实现

本文介绍了0-1背包问题,通过一个跑步比赛的例子阐述问题背景,详细解析输入输出格式,并分析了为什么贪心算法无法解决此问题。文章通过动态规划的方法,展示了状态转移方程,提供了C++实现代码,讨论了降维优化以避免超时和爆空间的问题。最后,给出了相关练习题目。
摘要由CSDN通过智能技术生成

例题描述 ——跑步

“梦之队”要参加市里组织的自由组合跑比赛,在比赛委员会临时给定的时间段中,各队自由

选择至少一名运动员参加,但是每个运动员的参赛时间都是一定的且不一定相同,而且每个

学校的队员只能在指定的时间段里参加跑步,即整个学校的参赛时间不能超过这个时间段。

现在已知道了每个运动员在指定的时间里可以跑多少米,如果你是教练,你将选择哪些运动

员参加比赛。使学校学“梦之队”的总成绩(跑的距离多少米)最高?

输入格式

第 1 行有两个整数 S(1 ≤ S ≤ 1000)和 n(1 ≤ n ≤ 100),用一个空格隔开,S代表学校参

赛队的总共跑步的时间,n代表可选择的运动员数目。

接下来的 2 至 n+1 行,每行包括两个在 1 到 100 之间(包括 1 和 100)的整数,分别是一

名运动员的可跑时间和在这个时间段里的成绩。

 输出格式

一个整数,表示在规定的时间内,“梦之队”可得到的最高成绩。

输入输出样例 

样例输入

4 3
4 30
3 20
1 11

输出样例

31

 

 样例分析

样例最多可以跑的时间是4秒,那么就有4种情况: 

      第一个人      第二个人      第三个人   总用时   总路程
1          √          ×
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值