第八天:poj1010(深度搜索+剪枝,之前完全没有接触过,所以不会,所以多学!!)

来源:互联网 发布:高晓松音乐 知乎 编辑:程序博客网 时间:2024/04/30 12:34

题目意思:给出了N种邮票,每种邮票都有自己的面值(可重复)要满足购买者所需要的值m
1.所用的n种邮票可以重复选
2.张数《=4
3.尽可能使用最大面值的邮票
4.张数尽可能少
5.如果张数相同则面值最大的邮票数量多的优先
6.如果上面都一样,则输出tie

题目的个人分析:
一开始做的时候,首先对于题目的要求一定要看清楚,那个是优先的解,然后是怎么做?对于我这种没怎么学过什么高端算法的人来说,最好的打算就是枚举出来,然后选择最优解,但是这样我觉得是没有提高的,所以今天必须要换一种思路去解题。
网上的大牛们给出了一种挺棒的,我以前听说过但是没用过的算法(dfs+剪枝)

我是第一次接触这个算法,所以我一定要自己说一遍这个:
(我描述一个算法一定会用自己的语言以一种最简单明了的方式去说的,因为所有具体的细节网上说的太多太多,多说无益)

1.dfs运用在那里?
答:图的遍历
2.为什么要用dfs?
答:找最优解
3.怎么用dfs(dfs的思想是什么)?
访问图的一个顶点,然后让这个顶点的一个变量改变,这个变量代表这个顶点已经被访问过了,若存在未被访问过的相邻的点那么dfs(这个点)。
4.剪枝是什么意思?
简单的说排除那些遍历操作时不满足题目需求的。(很大程度上面让算法的时间复杂度降低了)

对于这道题目来说,简单的来说,用一个数组去保存最优解,然后dfs搜索满足的解(根据题目给的条件去判断),然后不断更新原来的最优解数组,因为邮票数量不超过4所以剪枝,还要判断tie的情况。

当然这道题可以循环4次把所有的解都找出来,然后找到最优解,主要是因为只有4张邮票,数量并不多。其实这道题做下来对于dfs只是一个初步的认识,之后一定会有更深入的学习。

0 0
原创粉丝点击