栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

No.3.7

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

No.3.7

一、题目描述:
  在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和性能。假设当前有n个待串行调度用户,每个用户可以使用A/B/C三种不同的策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。

二、规则:
  1.相邻的用户不能使用相同的调度策略,例如,第一个用户使用了策略A,则第二个用户只能使用B或者C策略。
  2.对单个用户而言,不同的调度策略对系统资源的消耗可以归一化为抽象数值。例如,某用户分别使用A/B/C的略的消耗分别为 15/8/17。
  3.每个用户依次选择当前所能选择的对系统资源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。

三、输入描述:

第一行表述用户个数n
接下来每一行表示一个用户分别使用三个策略的系统消耗resA resB resC

四、输出描述:

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

五、示例:

输入

3
15 8 17
12 20 9
11 7 5

输出

24

说明

1号用户使用B策略,2号用户使用C策略,3号用户使用B策略。系统资源消耗:8 + 9 + 7 = 24;

六、输出描述:

所有策略对系统的资源消耗均为正整数,n<1000

参考结果:

package com.groupies.测试;

import java.util.Random;
import java.util.Scanner;
import java.util.TreeSet;


public class test01 {
    static TreeSet intSet = new TreeSet();
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int temp = in.nextInt();
        int[][] arr = new int[temp][3];
        Random r = new Random();
        
        System.out.println("-------------------");
        for (int i = 0; i < temp; i++) {
            arr[i][0] = r.nextInt(30) + 1;
            arr[i][1] = r.nextInt(30) + 1;
            arr[i][2] = r.nextInt(30) + 1;
            System.out.println(arr[i][0] + " " + arr[i][1] + " " + arr[i][2]);
        }
		//初始化TreeSet
        recursion(arr, 0, temp, arr[0][0], 1);
        recursion(arr, 1, temp, arr[0][1], 1);
        recursion(arr, 2, temp, arr[0][2], 1);
        //打印TreeSet中第一个值(最小值)
        System.out.println("-------------------");
        System.out.println(intSet.first());

    }
 

    
    public static void recursion(int[][] arr, int duplicate, int leftCount, int total, int recursionCount) {
        int left = leftCount - 1;
        if (left == 0) {
            intSet.add(total);
            return;
        }
        if (duplicate == 0) {
            recursion(arr, 1, left, total + arr[recursionCount][1], recursionCount + 1);
            recursion(arr, 2, left, total + arr[recursionCount][2], recursionCount + 1);
        } else if (duplicate == 1) {
            recursion(arr, 0, left, total + arr[recursionCount][0], recursionCount + 1);
            recursion(arr, 2, left, total + arr[recursionCount][2], recursionCount + 1);
        } else if (duplicate == 2) {
            recursion(arr, 0, left, total + arr[recursionCount][0], recursionCount + 1);
            recursion(arr, 1, left, total + arr[recursionCount][1], recursionCount + 1);
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830512.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号