翻硬币
没有AC的思路,就简单的考虑一种情况来实现的,通过率为45%。
def flip_corn(seq, x, y):
if not seq:
return 0
neg_to_pos = min(x, y)
count, flag = 0, False
for su in seq:
if flag:
if su == 1:
continue
else:
flag = False
count += 1
else:
if su == 0:
continue
else:
flag = True
if not flag and seq[-1] == 0:
count += 1
return count * neg_to_pos
if __name__ == '__main__':
n, x, y = list(map(int, input().strip().split()))
seq = list(map(int, input().strip().split()))
res = flip_corn(seq, x, y)
print(res)
'''
3 1 2
0 1 0
'''
取数
暴力求解,针对数字个数n和回合数m生成一个全排列,然后对每一种情况依次按序求解,返回最大值。
from itertools import permutations
def get_number(value, cost):
if not value:
return 0
vu, cu = value[0], cost[0]
return vu + get_number([val-cu for val in value[1:]], cost[1:])
def shuffle(values, costs, n, m):
index = list(permutations(range(0, n), m))
res = 0
for idx in index:
value = [values[i] for i in idx]
cost = [costs[i] for i in idx]
cur = get_number(value, cost)
# print(value, cost, cur)
if cur > res:
res = cur
return res
if __name__ == '__main__':
n = int(input().strip())
m = int(input().strip())
values = list(map(int, input().strip().split()))
costs = list(map(int, input().strip().split()))
res = shuffle(values, costs, n, m)
print(res)
'''
5
4
10 20 30 40 50
4 5 6 7 8
'''
(最近更新:2019年09月12日)
本文探讨了两种算法问题的解决方案:一是翻硬币问题,通过特定策略计算最少翻转次数;二是取数问题,采用暴力求解法在限定回合内获取最大数值总和。代码示例使用Python实现。
4734

被折叠的 条评论
为什么被折叠?



