【编程题目 |100分】用户调度问题【2021 H2, 2022 Q1,Q2考试题】


时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld


本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,

编码后请点击”保存并调试“按钮进行代码提交。


题目描述

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

假设当前有n个待串行调度用户,每个用户可以使用A/B/C三种不同的调度策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。

规则:

1.    相邻的用户不能使用相同的调度策略,例如,第1个用户使用了A策略,则第2个用户只能使用B或者C策略。

2.    对单个用户而言,不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如,某用户分别使用A/B/C策略的系统消耗分别为15/8/17。

3.    每个用户依次选择当前所能选择的对系统资源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。

输入描述:

第一行表示用户个数n

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

输出描述:

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

示例1   输入输出示例仅供调试,后台判题数据一般不包含示例

输入

3

15 8 17

12 20 9

11 7 5

输出

24

说明

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

备注:

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


CPP解法一


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <bits/stdc++.h>
using namespace std;
void SplitInt(string input, vector<int> &output, char patten) {
string one_word;
int j = 0;
input += patten;
for (int i = 0; i < input.size(); i++) {
if (input[i] == patten) {
one_word = input.substr(j, i - j);
if (!one_word.empty()) {
output.push_back(stoi(one_word));
}
one_word = "";
j = i + 1;
}
}
}
#include <bits/stdc++.h> using namespace std; void SplitInt(string input, vector<int> &output, char patten) { string one_word; int j = 0; input += patten; for (int i = 0; i < input.size(); i++) { if (input[i] == patten) { one_word = input.substr(j, i - j); if (!one_word.empty()) { output.push_back(stoi(one_word)); } one_word = ""; j = i + 1; } } }
#include <bits/stdc++.h>

using namespace std;

void SplitInt(string input, vector<int> &output, char patten) {
    string one_word;
    int j = 0;
    input += patten;
    for (int i = 0; i < input.size(); i++) {
        if (input[i] == patten) {
            one_word = input.substr(j, i - j);
            if (!one_word.empty()) {
                output.push_back(stoi(one_word));
            }
            one_word = "";
            j = i + 1;
        }
    }
}

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

CPP解法二


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include<bits/stdc++.h>
using namespace std;
#include<bits/stdc++.h> using namespace std;
#include<bits/stdc++.h>

using namespace std;

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Golang


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
var n int
var slistr []string
var sliin []int
var sliint [][]int
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { var n int var slistr []string var sliin []int var sliint [][]int
package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    var n int
    var slistr []string
    var sliin []int
    var sliint [][]int

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA解法一


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int number = scanner.nextInt();
int[][] input = new int[number][3];
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextInt()) { int number = scanner.nextInt(); int[][] input = new int[number][3];
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int number = scanner.nextInt();
            int[][] input = new int[number][3];

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA解法二


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = Integer.parseInt(sc.nextLine());
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = Integer.parseInt(sc.nextLine());
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.parseInt(sc.nextLine());

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA解法三


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import java.util.Scanner;
public class Main {
static int sum = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] num = new int[n][3];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
num[i][j] = sc.nextInt();
}
}
import java.util.Scanner; public class Main { static int sum = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] num = new int[n][3]; for (int i = 0; i < n; i++) { for (int j = 0; j < 3; j++) { num[i][j] = sc.nextInt(); } }
import java.util.Scanner;

public class Main {
    static int sum = 0;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] num = new int[n][3];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 3; j++) {
                num[i][j] = sc.nextInt();
            }
        }

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python解法一


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
n = int(input())
res = 0
preIndex = -1
n = int(input()) res = 0 preIndex = -1
n = int(input())
res = 0
preIndex = -1

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python解法二


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
while 1:
try:
n = int(input())
nums = [list(map(int, input().split())) for _ in range(n)]
while 1: try: n = int(input()) nums = [list(map(int, input().split())) for _ in range(n)]
while 1:
    try:
        n = int(input())
        nums = [list(map(int, input().split())) for _ in range(n)]

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看


JavaScript


Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
var hu = Number(readLine());
//let hu = Number("3");
let temp = [];
// let temp = [[15,8,17],
// [12,20,9],
// [11,7,5]];
var hu = Number(readLine()); //let hu = Number("3"); let temp = []; // let temp = [[15,8,17], // [12,20,9], // [11,7,5]];
var hu = Number(readLine());
//let hu = Number("3");
 
let temp = [];
// let temp = [[15,8,17],
//     [12,20,9],
//     [11,7,5]];

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看