华为OD- 用户调度

用户调度

题目描述

在通信系统中有一个常见的问题是对用户进行不同策略的调度,会得到不同系统消耗的性能。

假设由N个待串行用户,每个用户可以使用A/B/C三种不同的调度策略。

不同的策略会消耗不同的系统资源,请你根据如下规则进行用户调度,并返回总的消耗资源数。

规则是:

相邻的用户不能使用相同的调度策略,例如:

第一个用户使用A策略,则第二个用户只能使用B和C策略。

对单的用户而言,不同的调度策略对系统资源的消耗可以规划后抽象为数值,例如:

某用户分别使用A B C策略的系统消耗,分别为15 8 17,

每个用户依次选择当前所能选择的对系统资源消耗最少的策略,局部最优,

如果有多个满足要求的策略,选最后一个。

输入描述

第一行表示用户个数N

接下来表示每一行表示一个用户分别使用三个策略的资源消耗

resA resB resC

输出描述

最优策略组合下的总的系统消耗资源数

示例一

输入

3
15 8 17
12 20 9
11 7 5

输出

24

说明

1号用户使用B策略

2号用户使用C策略

3号用户使用B策略

系统资源消耗8+9+7

代码

def rules_zy(rules, k_index, i):
    i += 1
    next_kinsex = rules[i].index(min(rules[i]))
    if k_index == next_kinsex:
        if next_kinsex == 0:
            return min(rules[i][1], rules[i][2])
        elif next_kinsex == 1:
            return min(rules[i][0], rules[i][2])
        else:
            return min(rules[i][0], rules[i][1])
    else:
        return min(rules[i])


def get_dd(client, rules):
    cl = []
    rules = rules
    for i in range(client - 1):
        k_index = rules[i].index(min(rules[i]))
        cl.append(rules_zy(rules, k_index, i))
    cl = [min(rules[0])] + cl
    print(cl)
    sum = 0
    for i in cl:
        sum += i
    print(sum)


if __name__ == "__main__":
    client = int(input())
    rules = []
    for i in range(client):
        rules.append(list(map(int, input().split())))
    get_dd(client, rules)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值