其他分享
首页 > 其他分享> > 题目21

题目21

作者:互联网

在通信系统中有一个常见的问题是对用户进行不同策略的调度

会得到不同系统消耗的性能

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

不同的策略会消耗不同的系统资源

请你根据如下规则进行用户调度

并返回总的消耗资源数

规则是:

相邻的用户不能使用相同的调度策略

例如:

第一个用户使用A策略

则第二个用户只能使用B和C策略

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

例如

某用户分别使用ABC策略的系统消耗,分别为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

<?php
$n=fgets(STDIN);
$arr=[];
for($i=0;$i<$n;$i++){
    $arr[]=explode(' ',trim(fgets(STDIN)));
}
solution($arr);

function solution($arr)
{
    $pre=-1;//记录前一个值位置
    $total=0;
    for($i=0;$i<count($arr);$i++){
        $list=$arr[$i];
        $min=PHP_INT_MAX;
        if($i==0){
            for ($j=0;$j<3;$j++){
                if($min>=$list[$j]){
                    $min=$list[$j];
                    $pre=$j;
                }
            }
        }else{
            $tem=0;
            for($j=0;$j<3;$j++){
                if($j!=$pre&&$min>=$list[$j]){
                    $min=$list[$j];
                    $tem=$j;
                }
            }
            $pre=$tem;
        }
        $total+=$min;
    }
    echo $total;
}

//简化

function solution($arr)
{
    $pre=-1;//记录前一个值位置
    $total=0;
    for($i=0;$i<count($arr);$i++){
        $list=$arr[$i];
        $min=PHP_INT_MAX;
        $tem=0;
        for($j=0;$j<3;$j++){
            if($j!=$pre&&$min>=$list[$j]){
                $min=$list[$j];
                $tem=$j;
            }
        }
        $pre=$tem;
        $total+=$min;
    }
    echo $total;
}

 

标签:tem,题目,策略,list,消耗,用户,total,21
来源: https://www.cnblogs.com/weiguomiao/p/16487605.html