滴滴:笔试题(20190919)

本文探讨了利用下三角矩阵求解垃圾分类问题的算法,通过计算空闲区块和冲突值来决定分类方案。同时,介绍了一种简单游戏的暴力求解方法,尽管效率较低但能提供解决方案。文章深入分析了算法细节,包括输入解析、矩阵初始化和关键值计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

垃圾分类

利用下三角矩阵求得空闲区块的数目space和冲突的最大值conflict。如果space>=conflict则约束条件不影响分成两个车厢;否则根据space值返回。

def garbage(values, n):
    if not values:
        return n // 2 * 2
    conflict, space = 0, 0
    for nu in range(n):
        current = sum(values[nu][:nu])
        if current == 0:
            space += 1
        if current > conflict:
            conflict = current
    if space >= conflict:
        return n // 2 * 2
    else:
        return space * 2


if __name__ == '__main__':
    n, m = list(map(int, input().strip().split()))
    values = [[0 for _ in range(n)] for _ in range(n)]
    for _ in range(m):
        one, two = list(map(int, input().strip().split()))
        if one < two:
            one, two = two, one
        values[one-1][two-1] = 1
    res = garbage(values, n)
    print(res)

'''
5 2
1 4
3 4

5 4
1 2
2 3
3 4
4 5
'''

简单游戏

懒人模式,暴力求解。提交结果超时,通过45%。

def simple_game(seq, n, m):
    if not seq:
        return 0
    if n <= m:
        return sum(seq)
    res = sum(seq)
    for cursor in range(m, n):
        for si in range(n-cursor+1):
            cur = sum(seq[si:si+cursor])
            # print(cursor, si, seq[si:si + cursor], cur)
            if cur < res:
                res = cur
    return res


if __name__ == '__main__':
    n, m = list(map(int, input().strip().split()))
    seq = list(map(int, input().strip().split()))
    res = simple_game(seq, n, m)
    print(res)

'''
5 3
1 2 3 4 5

5 3
-2 1 -1 -1 -1
'''

(最近更新:2019年09月19日)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值