这份题目汇总,是我和几个朋友一起整理所得,放在我的博客只是为了存档纪念曾经一起奋斗的日子,以及分享给有需要的人。感谢老战友。
帖子很长,建议在目录查找需要的主题,然后直接Ctrl+F。
目录
- 1.基本算法
- 1.1.递归与分治
- 1.1.1.基础练习
- 1.1.2.进阶练习
- 1.2.模拟
- 1.2.1.基础练习
- 1.2.2.进阶练习
- 1.3.贪心
- 1.3.1.基础练习
- 1.3.2.进阶练习
- 1.1.递归与分治
- 2.解空间搜索
- 2.1.初出茅庐
- 2.1.1.深度优先搜索
- 2.1.2.广度优先搜索
- 2.1.3.穷竭(暴力)搜索
- 2.2.出类拔萃
- 2.2.1.隐式图最短路,简单剪枝
- 2.2.2.尺取
- 2.2.3.反转(开关问题,关灯问题)
- 2.2.4.二分搜索
- 2.2.4.1.最大化最小值(或最小化最大值)
- 2.2.4.2.最大化平均值
- 2.2.4.3.查找第K大的值
- 2.2.4.4.最小化第K大的值
- 2.2.4.5.其他
- 2.3.登峰造极
- 2.3.1.双端队列
- 2.3.2.调整搜索顺序和智慧剪枝
- 2.3.3.智慧搜索2( A IDA)
- 2.1.初出茅庐
- 3.图论
- 3.1.图论基础
- 3.2.图论中等
- 3.3.图论高级
- 4.动态规划
- 4.1.动态规划基础
- 4.2.DP中等
- 4.3.DP高级
1. 基本算法
1.1. 递归与分治
递归:找出递归子结构性质(原问题的解包含了子问题的解)、用子问题的解来递归定义原问题的解、找出递归终止条件。
分治:问题分解,逐个击破。在处理公共子问题时,可以引入一个表格,对于计算过的解缓存起来,重复利用。
1.1.1. 基础练习
- 放苹果:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16690
- Science:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31627
- Oil Skimming:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31171
- 棋盘问题:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15202
1.1.2. 进阶练习
- Two Famous Companies:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=29898
- Crazy Tank:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33707
- Palindromin Substring:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33418
1.2. 模拟
根据题目实际意思一步步写代码就好,没算法可言,耐心+基本功
1.2.1. 基础练习
- Biorhythms:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16391
- Maya Calendar:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11385
- 最大连续积:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38909
- 体重:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37583
- 最佳裁判:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37617
- Running Rabbits:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33714
- Counterfeit Dollar:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16424
- Numbers that Count:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11260
- Packets:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16476
- Packing Rectangles:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16996
1.2.2. 进阶练习
- 矩阵覆盖:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37614
- Sum of divisors:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33549
- Joseph:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11573
- Calendar Game:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17540
- Chemical Reactions:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31592
1.3. 贪心
顾名思义,贪心就是找到某一策略,每次寻找该策略下的最优,逐步找到最后的最优解。
而贪心的难点在于,你怎么确认是否存在有效的贪心策略!
下面是一些经典的例子
活动选择问题 Activity selection
最小生成树 Minimum spanning tree
部分背包问题 Partial knapsack problem
1.3.1. 基础练习
- Scientific Conference:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26713
- Exam:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=175278
- Electrification Plan:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47106
- Dragon of Loowater:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19048
- Two Teams:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14092
- Wooden Sticks:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16477
- Radar Installation:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10537
- Power of Cryptography:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10040
- Y2K Accounting Bug:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18025
- Gone Fishing:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16478
- Pass-Muraille:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11166
- Game Prediction:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16382
- Box of Bricks:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16479
- Integer Intervals:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16482
- Huffman’s Greed:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16483
1.3.2. 进阶练习
- Minimal Coverage:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13756
- Crossing River:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26251
2. 解空间搜索
所谓 解空间 ,顾名思义,就是 所有可能解的集合 或者说 所有候选答案的集合。
解空间搜索 是通用解法之首。如果问题无法用特别明显的算法解决,往往可以考虑搜索。
2.1. 初出茅庐
搜索入门,基础的穷搜,广搜,深搜
2.1.1. 深度优先搜索
- Lake Counting:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14167
- Red and Black:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26084
- Property Distribution:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=46522
- Ball:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22516
- Curling 2.0:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15201
- Catch That Cow:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15204
2.1.2. 广度优先搜索
- Cheese:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=49879
- Meteor Shower:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12685
- Seven Puzzle:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=49880
2.1.3. 穷竭(暴力)搜索
- Smallest Difference:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17170
- Backward Digit Sums:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=39458
- Hopscotch:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12306
- Osenbei:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=50785
2.2. 出类拔萃
隐式图最短路,简单剪枝,尺取,反转(开关问题,关灯问题),二分搜索
2.2.1. 隐式图最短路,简单剪枝
- Shuffle’m Up:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15207
- Pots:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15208
- Network Saboteur:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15209
- Sudoku:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15211
- Tudoku:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16441
- Channel Allocation:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15212
2.2.2. 尺取
头指针和尾指针不断交替推进 寻找满足条件的最小区间
- Jessica’s Reading Problem:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=24699
- Bound Found:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=39361
- Sum of Consecutive Prime Numbers:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18023
- Graveyard Design:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=39270
2.2.3. 反转(开关问题,关灯问题)
同一灯开关操作两次会互相抵消,可利用二进制压缩状态
- EXTENDED LIGHTS OUT:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17722
- Flip Game:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16122
- Fliptile:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17522
- Game:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22970
- The Water Bowls:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17471
2.2.4. 二分搜索
利用有序数列的特性,每次检查解空间的中点是否满足条件,无论是否满足 最优解只会落在大于中点或小于中点的解空间内,
从而每次可以把解空间缩小一半,最终在O(logN)次的比较之内求得最优解
2.2.4.1. 最大化最小值(或最小化最大值)
- Aggressive cows:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21309
- River Hopscotch:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16277
- Monthly Expense:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14546
- Drying:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16416
- Cow Acrobats:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11013
2.2.4.2. 最大化平均值
- Dropping tests:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17097
- K Best:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=39448
2.2.4.3. 查找第K大的值
- Median:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=24230
- Matrix:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=24239
2.2.4.4. 最小化第K大的值
- Moo University - Financial Aid:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11455
- Telephone Lines:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12427
2.2.4.5. 其他
- Garland:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17196
- Showstopper:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15091
2.3. 登峰造极
双端队列搜索,智能搜索(剪枝 A* IDA*)
2.3.1. 双端队列
双端队列就是一个两端都是结尾的队列。队列的每一端都可以插入数据项和移除数据项。是一种具有队列和栈的性质的数据结构。
- Sliding Window:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16694
- The Fewest Coins:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20465
- Batch Scheduling:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10364
- FIMO sequence:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22461
2.3.2. 调整搜索顺序和智慧剪枝
调整搜索顺序,对比盲目搜索,需要对所有分支做一定的评估,选择最大可能性的解空间优先进行搜索
以数独为例,优先填只有1个可能性的空格,如果没有,优先填可能性少的空格
智慧剪枝,设计特殊的评估函数 或 利用已经得到部分解 限制搜索深度和广度
例如 要求最小深度,目前得到满足条件的深度是5,当搜索深度到了6即可立即终止,搜索其他分支
- Sudoku:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10883
- Sudoku:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10698
- Sticks:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14913
- Gap:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27367
- Power Calculus:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11302
- Square Destroyer:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17543
2.3.3. 智慧搜索2( A IDA)
剪枝虽然可以一定程度优化,让我们较快接近最优解,但没有找到较好解前,依然需要探索很多不必要的解空间
深度优先搜索通过估算下界,提前剪枝优化的算法叫IDA*
广度优先搜索利用估算下界优化,就是A*
- N皇后问题:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33634
- Solution to the n Queens Puzzle:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23664
- Eight:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16377
- The Morning after Halloween:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18735
- Square Carpets:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36736
- 15-Puzzle Problem:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21237
3. 图论
3.1. 图论基础
最短路径、最小生成树、强连通分量、拓扑排序入门题
- Christmas Tree:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10444
- Unique MST:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17124
- Slim Span:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15723
- School Network:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17001
- Labeling Balls:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19855
3.2. 图论中等
有一定难度的图论题,最大流、网路流、NP问题入门题
- Bottom of Graph:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11217
- Going Home:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11578
- Popular Cows:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16578
- Network:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11132
- Taxi Cab Scheme:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11751
- Instantaneous Transference:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14370
- Drainage Ditches:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10499
- King’s Quest:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17071
- Optimal Milking:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10503
- Sightseeing:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15297
- Sightseeing Cows:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17742
- Graph Coloring:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17391
- Secret Milking Machine:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10504
3.3. 图论高级
综合性较强难度较大的题目
- Cow Relays:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17690
- Picnic Planning:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11062
- Friendship:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12876
- Cable TV Network:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11083
- March of the Penguins:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10507
- Dual Core CPU:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16358
- Kaka’s Matrix Travels:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17098
- Distance Queries:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11131
- PIGS:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10509
- Knights:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=12602
- Priest John’s Busiest Day:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18641
- Firing:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17404
4. 动态规划
4.1. 动态规划基础
DAG最短路问题、01背包、最长递增子序列、多源最短路、树形DP
- Strategic game:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18778
- Stockbroker Grapevine:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14577
- AGTC:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17326
- Charm Bracelet:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17547
- Longest Ordered Subsequence:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=15302
- Kind Spirits:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=22065
- Metro:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14094
4.2. DP中等
有一定难度的动态规划问题,最长递增子序列、排列组合问题、完全背包、矩阵连乘、状态压缩DP、区间DP
- Folding:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11442
- False Mirrors:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17671
- Multiplication Puzzle:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21493
- Piggy-Bank:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17110
- Flags:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21494
- Bridging signals:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17328
4.3. DP高级
综合性较强难度较大的动态规划题目