题目要求我们劈最少的瓜,能够满足瓜总量
我刚开始的思路是这样的: m=sum+=Ai/2
循环遍历所有的瓜,从第一个瓜开始劈,满足m=sum+=Ai/2就不再劈了
否则所有的瓜劈完了,return -1
瓜数量最大为10^9,也就是最多一个循环,中间再剪枝一下
但是这个结果怎么算都是-1
观察发现这应该有一个回溯的过程,第一个和第二个瓜的重量不够,就把第二个瓜的重量弹出,再拿第一个瓜的重量与第三个瓜的重量相加。 我是这样写的:
但是错了,这段代码只考虑了一种情况,就是对半砍瓜的情况,实际上还有两种情况,就是我不买,或者我直接买一整个。
其实看题目给的样例就可以看出来:
所以,请仔细阅题
思想
一.枚举三种情况:
1不买当前的瓜
2劈一半
3买一整个瓜
对于这三种情况的组合情况我们通过dfs去穷举所有排列组合情况。
二.维护一个最小劈瓜数ans
code
全局变量部分
main函数部分
dfs部分
但是这样只能通过一半的测试样例,因为假如20个数,每个数都是1e9,可能int就不够用了:
我们需要#define int long long
然后将main返回类型改为signed即可。