百度:笔试题(20190910)

翻硬币

没有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日)

你可能感兴趣的:(#,NOWCODER)