唐巧的博客

唐巧的博客

马上订阅 唐巧的博客 RSS 更新: https://blog.devtang.com/atom.xml

CSPJ 教学思考:动态规划

2025年1月5日 18:03

引言

动态规划是 CSPJ 拉分的关键知识点。

之所以这样,是因为动态规划不像 DFS、BFS、二分那样有固定的模版格式。学生要在动态规划问题上融汇贯通,需要花费大量的练习,也需要足够的聪明。

笔者自己在高中阶段,也是在动态规划问题上困扰许久。我自己的学习经验是:动态规划还是需要多练,练够 100 道题目,才能够熟悉动态规划的各种变型。之后在比赛中看到新的题目,才会有点似曾相识的感觉,进一步思考出状态转移方程。

所以,我打算写 100 道动态规划方程的题解,希望有志攻破此难关的学生和家长一起加油!

动态规划解题的核心问题

虽然动态规划没有模版可以套,但是动态规划有三个核心问题:

  • 状态的定义
  • 状态转移方程
  • 初始状态的设置

一般思考动态规划就是思考以上三个问题,这三个问题解决了,动态规划的程序也可以写出来了。

教学题目

推荐的教学题目如下:

题目名说明
P2842 纸币问题 1基础 DP,记忆化搜索
P1216 数字三角形基础 DP,记忆化搜索 【经典 DP】
P2840 纸币问题 2基础 DP
P2834 纸币问题 3基础 DP,有多处可优化的点
P1048 采药NOIP2005 普及组第三题。01 背包问题。【经典 DP】
P1616 疯狂的采药完全背包问题。【经典 DP】
P2196 挖地雷NOIP1996 提高组第三题。涉及输出路径技巧。
P1434 滑雪上海市省队选拔 2002
P1115 最大子段和最大子段和。【经典 DP】

适合的作业:

题目名说明
P4017 最大食物链计数记忆化搜索
P2871 Charm Bracelet SUSACO 07 DEC,01 背包
P1802 5 倍经验日01 背包
P1002 过河卒NOIP2002 普及组,记忆化搜索
P1049 装箱问题NOIP2001 普及组,01 背包
P1064 金明的预算方案01 背包变型,NOIP2006 提高组第二题
P1077 摆花NOIP2012 普及组
P1164 小A点菜与摆花一题类似
P2392 考前临时抱佛脚01 背包变型
B3873 小杨买饮料01 背包变型, GESP202309 六级
P13015 学习小组无穷背包,GESP 202506 六级
P10721 计算得分 | 背包问题变种,GESP 202406 六级 |

更多的题单:

例题代码

P2842 纸币问题 1

此题可以带着孩子一步步推导和演进。具体步骤如下。

先引导孩子用最暴力的 DFS 的方式来做此题,建立基础的解题框架,虽然会超时,但是也帮助我们后面引导孩子学会记忆化搜索。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* DFS,超时
*/
#include <bits/stdc++.h>
using namespace std;

int n, w;
int v[1100];

int dfs(int pt) {
if (pt == 0) ret...

剩余内容已隐藏

查看完整文章以阅读更多