第三步最短等待连同穷举
补全 wait_total,输出两个数:穷举 24 种排法的最小值,和按耗时排好之后的值。 (本题用 g++ -std=c++17 -O0 编译。)
第四步背包三连
补全三个背包函数里的 knap_dp 和 knap_frac,输出 0-1 贪心 / 0-1 最优 / 可切开的贪心三个数。 (本题用 g++ -std=c++17 -O0 编译。)
交付贪心解加正确性依据
这是这条路线的最终作品。前面写过的函数都已给好,只差区间调度和背包 DP 两处。一次验完五条:六场会按结束早 4 场、按开始早 1 场;25/10/5/1 找 63 贪心 6 枚且和最优一致;4/3/1 找 6 贪心 3 枚、最优 2 枚;
对拍到底在验证什么
在真机上拿暴力解和你的贪心对拍大量随机数据,是为了【0】。
写区间调度
场景:实验机上 ~/work/gr/sched.cpp 读入若干个区间,要输出最多能选出几个互不重叠的区间,可 max_meetings 还没写。 任务:补全 max_meetings(区间 [s, e) 左闭右开,首尾相接不算重叠)。ma
十万个区间一秒排完
场景:~/work/gr/big.cpp 也算最多能选几个不重叠的区间,结果是对的,可它每一步都把剩下的区间整个扫一遍找结束最早的,十万个区间要跑很久。 任务:改写 big.cpp,让 10 万个区间在 1 秒内算完。make 编译(-O2
找出背包贪心的反例
场景:~/work/gr/knap.cpp 用「价值高的先拿」来装 0-1 背包。它常常对,但不是永远对。 任务:按 ~/题目.txt 给的物品件数和容量,构造一组物品,让 knap 的结果比真正的最优解小,把这组输入写进 ~/work/g
修好排序准则
场景:~/work/gr/rule.cpp 算最多能排几场会,可它按开始时间排序,遇到很早开始的长会就排少了。 任务:修好比较器,让它按正确的贪心准则排序。make 编译后用 sample.txt 自测。 可操作范围:只在分给你的这台实验机
找零贪心不成立就用 DP
场景:~/work/gr/coin.cpp 用「大面值优先」找零。这次的面值不是 1/5/10/25 那种,贪心会多用硬币。 任务:改写 min_coins,对每个查询金额输出真正的最少枚数(面值里一定有 1)。make 编译后用 samp
回溯和贪心差在哪
回溯和贪心最根本的区别是【0】。