复旦20考研机试真题(B)--打地⿏

这篇博客讨论了复旦大学20考研机试一道关于选择整数的问题,其中要求选出的整数排序后相邻两数之差不小于给定值d。博主分享了自己在考试中因错误使用动态规划导致超时的反面例子,指出实际上不需要动态规划,只需从小到大选择满足条件的最小数字即可获得最大数量的选取。通过举例说明了这种方法的正确性和最优性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定 n 个整数 a1, a2, …, an 和⼀个 d,你需要选出若⼲个整数,使得将这些整数从⼩到⼤排好序之 后,任意两个相邻的数之差都不⼩于给定的 d,问最多能选多少个数出来。
【输⼊格式】 第⼀⾏两个整数 n,d (1<=n<=105, 0<=d<=109),分别表⽰整数个数和相邻整数差的下界。 第⼆⾏ n 个整数 a1, a2, …, an (1<=ai<=10^9, 1<=i<=n),表⽰给定的 n 个整数。
【输出格式】 仅⼀⾏⼀个整数,表⽰答案。
【样例输⼊】

6 2 
1 4 2 8 5 7 

【样例输出】

3 

【解释】 注意,选出的数在排序后,相邻两数之差不⼩于给定值。 ⽐如,对于给定值 2,[1 4 7] 是⼀个满⾜条件的选择⽅案,但是[1 4 5] 却不是,因为 5 - 4 = 1 < 2。 在本样例中,[1 4 7],[1 4 8],[1 5 7],[1 5 8],[2 4 7],[2 4 8] 都是满⾜要求的选择⽅案,但是⽆论 如何都没有办法得到⼀个选出 4 个数且满⾜条件的⽅案,所以本样例的答案为 3。
【时空限制】 2500ms,256MB

这道题目,我只过了部分测试点,原因是超时了。我没有做到具体问题具体分析,滥用了动态规划,时间复杂度没有符合要求。下面我先给出自己考场上的代码,给大家做个反面教材,之后给出正确的代码。

考场代码(不能AC):

#include<iostream> 
#include<vector>
#include<algorithm>
using namespace std;
int dp[100010];
int max(int a, int b) {
    return a > b ? a : b; }
int main() {
   
	int n, d, ret =0;
	scanf("%d%d"
### 复旦大学计算考研题库题目资源 对于复旦大学计算专业的考生而言,获取有效的上题目资源至关重要。尽管官方并未公开完的历年真题集,通过一些渠道仍可以获得有价值的练习材料。 #### 官方资源 学校官网通常会发布最新的招生简章以及考大纲,这些文件中可能包含有关编程语言的要求考察的重点方向[^4]。因此,定期访问目标院校官方网站并仔细阅读发布的各类通知是非常必要的。 #### 社区论坛与博客文章 许多往届考生会在网络平台上分享自己的备考经验心得笔记,其中包括模拟解题思路分析。例如,在某些技术社区或教育类网站上可以找到关于复旦2021题目的讨论帖,这有助于了解命题风格及难度水平[^3]。 #### 开源项目与在线评测平台 利用开源软件项目作为实践对象能够有效提升编码能力;同时加入LeetCode、牛客网这样的在线刷题平台参与每日挑战赛也可以积累实战经验。这类平台上的算法竞赛往往涵盖了大量经典的数据结构与算法问题,非常适合用来强化训练。 ```python def find_max_subarray(nums): max_sum = float('-inf') current_sum = 0 for num in nums: current_sum += num if current_sum > max_sum: max_sum = current_sum if current_sum < 0: current_sum = 0 return max_sum ``` 上述代码展示了如何求解最大子数组之的问题,这是一个典型的动态规划案例,经常出现在各大高校的研究生入学考当中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值