蓝桥杯 1.买瓜 dfs

148 阅读1分钟

1.买瓜 - 蓝桥云课 (lanqiao.cn)

题目要求我们劈最少的瓜,能够满足瓜总量

我刚开始的思路是这样的: m=sum+=Ai/2

循环遍历所有的瓜,从第一个瓜开始劈,满足m=sum+=Ai/2就不再劈了

否则所有的瓜劈完了,return -1

瓜数量最大为10^9,也就是最多一个循环,中间再剪枝一下 image.png

但是这个结果怎么算都是-1

image.png

观察发现这应该有一个回溯的过程,第一个和第二个瓜的重量不够,就把第二个瓜的重量弹出,再拿第一个瓜的重量与第三个瓜的重量相加。 我是这样写的:

image.png

但是错了,这段代码只考虑了一种情况,就是对半砍瓜的情况,实际上还有两种情况,就是我不买,或者我直接买一整个。

其实看题目给的样例就可以看出来:

image.png 所以,请仔细阅题

思想

一.枚举三种情况:

        1不买当前的瓜
        
        2劈一半
        
        3买一整个瓜

对于这三种情况的组合情况我们通过dfs去穷举所有排列组合情况

二.维护一个最小劈瓜数ans

image.png

code

全局变量部分

image.png main函数部分

image.png

dfs部分

image.png

但是这样只能通过一半的测试样例,因为假如20个数,每个数都是1e9,可能int就不够用了:

image.png

我们需要#define int long long

然后将main返回类型改为signed即可。

代码托管:0买瓜 - 蓝桥云课 (lanqiao.cn)