题目:
有n(2<=n<=20)头奶牛在玩飞盘,可是飞盘飞到了高处。现在他们要想办法叠在一起,去取飞盘。飞盘的高度为H(1 <= H <= 1,000,000,000)。给出每头奶牛的重量、高度、强壮度(能够承受的重量),问他们是否够得到,如果能够取到,求它们额外还能承受最多多少重量。(要保证每头奶牛所承受的重量都不超过它的强壮度)。
思路:
先不管,我们可以把暴力思想想出来.......
再来,我们可以用贪心的思想想一下:
比如,现在已经有许多奶牛叠加在一起,我们需要选择A,B (强壮度分别是va,vb),设现在这叠奶牛还可承受sum的重量,
若a放在b下面:
min(sum-wa ,va)> wb
否则:
min(sum-wb,vb)>wa
变形一下得:
min(sum,va+wa)
min(sum,vb+wb)
所以若va+wa>vb+wb则a就放在下面。
最后用DFS搜出所有可行解,再统计最大值,可行解最多不超过
代码:
#include <iostream>
#include <