- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
一、编程题
1、最长上升子序列(2024.3四级)
一个数的序列b,当bb…
i12
b的时候,我们称这个序列是上升的。对于给定的一个序列(a,a,…,
S12
a),我们可以得到一些上升的子序列(a,a,…,a),这里1=ii…i=
Ni1i2iK12K
N。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,
8)等等。这些子序列中最长的长度是4,比如子序列(1,3,5,8).
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
时间限制:11000
内存限制:65536
输入
输入的第一行是序列的长度N(1=N=
1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。
输出
最长上升子序列的长度。
样例输入
7
1735948
样例输出
4
参考答案:对于给定的序列,最长上升子序列的长度为4。
解析:【喵呜刷题小喵解析】:
这个问题是一个经典的动态规划问题,可以通过动态规划算法来解决。
首先,我们需要定义一个数组dp,其中dp[i]表示以第i个数结尾的最长上升子序列
的长度。初始时,所有的dp值都为1,因为每个数本身都可以构成一个长度为1的上
升子序列。
然后,我们遍历序列中的每个数,对于每个数a[i],我们再遍历它之前的所有数a[j]
,其中j的取值范围是1到i-1。如果a[j]
a[i],说明我们可以将a[i]加入到以a[j]结尾的上升子序列中,形成一个更长的上升
子序列。因此,我们可以更新dp[i]的值为dp[i]和dp[j]+1中的较大值。
最后,我们遍历dp数组,找到其中的最大值,即为最长上升子序列的长度。
对于样例输入,我们可以按照上述算法进行计算,得到最长上升子序列的长度为4
。
2、重启系统(2024.3四级)
小明帮助管理一个处理数据的计算系统,有N个待处理的任务,需要按照顺序来完
成这些任务,即每次所完成任务的编号都要大于前一个完成任务的编号,且单个任
务不可以分解完成。计算系统运行着一个奇怪的保护程序,它限制了系统当前所能
处理的数据量不能超过上次完成任务所处理的数据量。重启系统可以使它立刻恢复
到最高性能(一开始系统拥有最高性能,最高性能大于任何待处理任务的数据量)
。小明有一次重启系统的权限(也可以不使用),你能帮他算出最多能完成几个任
务吗?
时间限制:1000
内存限制:65536
输入
第一行:N(2=N=1000)待处理的任务数第二行:
N个整数,每个任务的数据量
输出
输出只包括一行,这一行只包含一个整数,表示最多能完成的任务数。
样例输入
10
15432109876
样例输出
9
提示
回想一下最长上升子序列问题
参考答案:要完成最多任务,我们可以采用动态规划的方法来解决这个问题。我们
可以定义一个dp数组,其中dp[i]表示以第i个任务为结尾的最长上升子序列的长度
。初始化dp数组为1,表示每个任务本身都可以作为一个上升子序列。然后,我们
遍历从1到N的任务,对于每个任务i,我们遍历之前的任务j,如果j
i且任务j的数据量小于任务i的数据量,那么我们可以将任务i加入到以任务j为结尾
的上升子序列中,更新dp[i]为dp[j]+1。最后,我们找到dp数组中的最大值,即为最
多能完成的任务数。
解析:【喵呜刷题小喵解析】:
这个问题实际上是一个最长上升子序列问题,但是增加了限制条件:系统当前所能
处理的数据量不能超过上次完成任务所处理的数据量。这意味着我们不能随意地选
择任务来形成上升子序列,而是需要保证每次选择的任务的数据量不超过前一个任
务的数据量。
为了解决这个问题,我们可以采用动态规划的方法。首先,我们定义一个dp数组,
其中dp[i]表示以第i个任务为结尾的最长上升子序列的长度。然后,我们遍历从1到
N的任务,对于每个任务i,我们遍历之前的任务j
原创力文档


文档评论(0)