Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 98 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,98 @@
# cursor
# CSP 300 分目标算法清单(精简版)

下面内容只保留 **CSP 300 分目标**(主攻前 3 题)最常用的算法,不展开偏竞赛高阶内容。

## 1. 300 分目标怎么学

- **T1**:保证全对(模拟 / 枚举 / 简单数学)
- **T2**:主攻全对(排序、前缀和、双指针、基础贪心)
- **T3**:尽量全对(BFS/DFS、简单 DP、基础图)
- **T4**:能拿部分分即可(不作为 300 分核心)

---

## 2. 大算法 + 小分支(按 CSP300 实用性)

### 2.1 模拟 / 枚举
- 线性扫描模拟
- 多重循环枚举
- 按题意状态更新(字符串、日期、矩阵)

### 2.2 排序与贪心
- 排序后扫描
- 按规则优先(区间端点、最小/最大优先)
- 局部最优构造

### 2.3 前缀和 / 差分
- 一维前缀和(区间和)
- 二维前缀和(子矩阵和)
- 差分(区间加、最后还原)

### 2.4 双指针(你提到的重点细分)
- **滑动窗口**:最长/最短满足条件子数组、字符串窗口
- **左右指针**:有序数组配对、去重、归并式扫描
- **快慢指针**:链表环、链表中点、原地去重

### 2.5 二分
- 有序数组二分(lower_bound / upper_bound 思想)
- 二分答案(可行性判断 + 单调性)

### 2.6 搜索:BFS / DFS
- BFS 分层最短步数(网格、图)
- DFS 连通块 / 回溯(小规模)
- 图遍历基础(邻接表)

### 2.7 动态规划(只保留 CSP300 常用)
- 线性 DP(如爬楼梯、最大子段和)
- **0/1 背包(重点)**
- 简单状态转移(二维 DP,不做高阶优化)

> 300 分阶段可先不学:树状数组进阶、线段树复杂维护、网络流、数位 DP、斜率优化等。

---

## 3. 0/1 背包最小模板(C++)

```cpp
// n 个物品,背包容量 W
// w[i] 体积, v[i] 价值
int n, W;
vector<int> w(n + 1), v(n + 1);
vector<int> dp(W + 1, 0);

for (int i = 1; i <= n; i++) {
for (int j = W; j >= w[i]; j--) { // 倒序,保证每件物品只用一次
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
}
// dp[W] 即答案(或根据题意取 max(dp[j]))
```

---

## 4. 2024-2025 近年真题(建议加练)

> 建议按“每套只做 T1-T3,限时 2~3 小时”训练。

- **2024 年场次真题**
- 2024-03:T1/T2/T3
- 2024-09:T1/T2/T3
- 2024-12:T1/T2/T3
- **2025 年场次真题**
- 2025-03:T1/T2/T3
- 2025-09:T1/T2/T3(如已发布)

训练建议:
1. 第一遍按正式时间做;
2. 第二遍只复盘错题,标注算法归类(如“滑动窗口”“0/1 背包”);
3. 第三遍重写一遍最短可 AC 代码模板。

---

## 5. 复习优先级(只为 300 分)

1. 模拟 + 枚举(必须稳定)
2. 前缀和/差分 + 排序贪心
3. 双指针(滑动窗口 / 快慢指针)
4. BFS/DFS 基础
5. 线性 DP + 0/1 背包
Loading