把"挑最短的"写出来,和正确的比

补全 sched(key 决定按什么排),对三场会 [(0,4),(3,5),(4,8)] 跑两遍:按时长最短和按结束最早。 把两个场次数拼起来输出(最短的在前)。

开始练习 →

⚠️ 让程序自己去搜反例

补全代码:面值 4、3、1,金额从 1 往上一个个试,输出第一个贪心比最优差的金额。

开始练习 →

⚠️ 有的面值搜到 200 也搜不出反例

同一个搜法跑两组面值,金额都试到 200 为止: 4、3、1:输出第一个反例金额 25、10、5、1:搜完都没有,输出 没找到反例 两个结果用 / 拼起来输出。

开始练习 →

贪心和动态规划的根本区别

贪心和动态规划的根本区别是【0】。

开始练习 →

什么时候必须换成 DP

一个问题必须用 DP 而不能用贪心,是因为【0】。

开始练习 →

⚠️ 装不满的背包:贪心和最优

背包能装 10,三件物品是 (重量6,价值30)、(重量5,价值20)、(重量5,价值20),每件要么整件拿走要么不拿。运行下面这段程序: def knap_greedy(items, cap): v = 0 for w,

开始练习 →

同样的东西,能切开就不一样了

还是这三件、还是装 10,但这次可以切开按比例拿(切下来那部分的价值按 价值 * 剩余容量 // 重量 算,保证整除)。运行下面这段程序: def knap_frac(items, cap): v = 0 for w, va

开始练习 →

写 0-1 背包的贪心

补全 knap_greedy:按每公斤值多少从高到低排,装得下就整件拿走。输出总价值。

开始练习 →

写 0-1 背包的动态规划

补全 knap_dp:dp[c] 表示容量 c 时的最大价值,每件物品容量从大往小更新一遍。输出最大价值。

开始练习 →

写可以切开的背包

补全 knap_frac:同样按每公斤价值排,装得下就整件拿,装不下就切一块把包填满(切下来的价值用 val * cap // w)。

开始练习 →