![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
挑战程序设计竞赛
夏奇火
这个作者很懒,什么都没留下…
展开
-
2.1.5 宽度优先搜索(BFS) (《挑战程序设计竞赛》)
宽度优先搜索 核心是按照距开始状态由近及远的顺序进行搜索,即先找完第一步的情况,再找完第二步的情况,再找完第三步的情况…… 所以,可以很容易地找到最短路径,最少操作之类的问题的答案。 例题: 样例答案是22 代码: #include #include #include using namespace std; const int INF=100000000; typedef原创 2018-01-23 16:06:25 · 507 阅读 · 3 评论 -
2.1.4 深度优先搜索(DFS) (《挑战程序设计竞赛》)
深度优先搜索(DFS) 其核心是:从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。 例题一: 看完解析后打了一遍代码: #include #include using namespace std; int n,a[50],k; bool dfs(int i,int sum) { if(i==n)原创 2018-01-22 16:29:14 · 356 阅读 · 0 评论 -
2.2 贪心算法(二)(《挑战程序设计竞赛》)
书接上一回,继续做题: 字典序最小问题:Best Cow Line ( POJ 3617 ) 最开始的想法是:对比首尾的字符大小,选小的放入T中 而当首尾字符相同的时候,对比第二个和倒数第二个的字符,选小的放入T中,如果还相同,则对比第三个和倒数第三个字符,一次类推。如果都相等的话,则是回文串,任意选两边都可以。 #include #include using namesp原创 2018-01-24 21:27:20 · 314 阅读 · 0 评论 -
2.2 贪心算法(一)(《挑战程序设计竞赛》)
贪心 核心是如果某道题的最优策略是唯一的,在计算过程中只要一直遵循这个固定的最优策略就可以了。 先来个简单例子: 代码: 例二: 最优思路是,每次都选取结束时间最短的工作。因为每项工作提早结束,留给后面的时间就更多,就有机会完成更多工作。 代码如下: #include #include #include using namespace std; int原创 2018-01-23 18:00:40 · 330 阅读 · 0 评论 -
2.3.1 记忆化搜索与动态规划(《挑战程序设计竞赛》)
PS:贪心终于看完了…… 记忆化搜索 意思是:在计算过程中,一边计算,一边记录局部的结果。 应用于对某些状态有重复计算的问题。 例题一:背包问题 最直接的思路是:对于每个物品,决定放和不放,所以复杂度是O(2^n) 代码如下: #include #include #include using namespace std; int n,w[105],v[105],a原创 2018-01-25 16:15:52 · 254 阅读 · 0 评论