UNIT 51 / 78 · W07-4
用状态定义约束动态规划
本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。
时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。
先知道自己在观察什么
动态规划与解题表达:状态必须回答一句话 →
先定义最少硬币状态与空选择,再比较零一背包容量正序/逆序依赖;算法题不作为新的G0门。
先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。
先留下自己的预测或独立尝试
手算币值1、3、4凑6的最优2枚,与贪心3枚比较,再运行零金额与不可达检查。
最少硬币击破贪心 →源码下载与编译入口
下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →
18-a.cpp先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。
通过一个变动看清原因
在副本增加币值[2,5]的金额3、4、7,保持正币值和金额范围检查。
修改后应观察到什么
金额3无解,4需要2枚,7需要2枚。
换一组条件,独立解决
独立写零一背包小实例:一件重量2价值3的物品、容量4;分别在纸上推正序和逆序,正确实现只用一次。
用这些条件检查自己的实现
- 正确结果3;错误正序会得到6,必须解释依赖来自本轮还是上一轮。
- 容量0结果0;零件数结果0;本题仅用小型合法重量。
用证据决定是否进入下一单元
- 状态的‘恰好’与‘至多’为什么必须先选定?
- 空间压缩怎样影响方案重建?
本单元的验收依据
保留状态定义、反例和边界测试;既有4h算法/英文用于变体复习,不再增加额外课程时数。
留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。