打怪兽
题目描述:
小蓝操控着游戏主角,与怪兽进行激烈的战斗。小蓝有n件道具(法宝),每件道具都有一个攻击值x,使用该道具会使怪兽的体力值减少x。
已知怪兽的初始体力值为50,当怪兽的体力值小于或等于0时,小蓝胜利。
小蓝可以以任意顺序使用道具,对怪兽造成伤害,直到取得胜利。每件道具只能使用一次。
输入小蓝的道具数量n,以及所有道具的攻击值,请问小蓝最少使用几件道具才能获得胜利。
数据保证小蓝使用所有道具,肯定能取得游戏胜利。
输入:
第一行一个正整数,为小蓝的道具数量n(2<=n<=20);
第二行,按字符串形式输入n个正整数(大小在1~20范围内),相邻两个正整数用一个空格分隔,依次表示每个道具的攻击值。
提示:
s = input() #输入一个字符串,赋值给s
a = s.split(' ') #将字符串s按空格拆分,保存到列表a中
lis = [int(i) for i in a] #将列表a的元素转换成整数,保存到列表lis中
输出:
一个整数,为小蓝最少使用几件道具才能获得胜利。
输入样例:
5
5 15 20 20 10
输出样例:
3
参考答案:
#参考程序1:
n = int(input())
s = input()
a = s.split(' ')
lis = [int(i) for i in a]
lis.sort(reverse = True) #从大到小排序
i = 0
pow = 50
while pow > 0: #如果怪兽没死就继续打
pow -= lis[i]
i += 1
print(i)
#参考程序2(校验用):
a = [0]*20
vis = [0]*20
def dfs(n, num, Pow, k):
global ans
if Pow >= 50: return
for i in range(n):
if vis[i] == 0 and num[i] >= a[k - 1]:
a[k] = num[i];
vis[i] = 1
Pow += num[i]
if(Pow >= 50): ans = min(ans, k);
else: dfs(n, num, Pow, k + 1)
vis[i] = 0
Pow -= num[i]
n = int(input())
num = [int(i) for i in input().split(' ')]
ans = n
dfs(n, num, 0, 1)
print(ans)