用户调度问题

用户调度问题

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

例如: 第一个用户使用A策略 则第二个用户只能使用B和C策略 对单的用户而言,不同的调度策略对系统资源的消耗可以规划后抽象为数值 例如 某用户分别使用ABC策略的系统消耗,分别为15 8 17 每个用户依次选择当前所能选择的对系统资源消耗最少的策略,局部最优 如果有多个满足要求的策略,选最后一个

输入描述:

  • 第一行表示用户个数N
  • 接下来表示每一行表示一个用户分别使用三个策略的资源消耗 resA resB resC

输出描述: 最优策略组合下的总的系统消耗资源数

看网上仅有的答案是贪心方式的,场景考虑不全。DP写了下,自己验了几组数据,不知道是否AC的,仅供参考:

public class 任务调度问题2_动态规划思路 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int userNum = sc.nextInt();
            int[][] res = new int[userNum][3];
            for(int i=0;i<userNum;i++) {
                for(int j=0;j<3;j++) {
                    res[i][j] = sc.nextInt();
                }
            }
            jobDispatch(res,userNum);
        }
        sc.close();
    }

    public static void jobDispatch(int[][] res,int userNum) {
        // 使用二维数组保存状态:每个维度的含义分别是:[当前用户ID][所选的任务策略:A为0、B为1,、C为2],默认从下标1开始,所以是4
        int[][] dp = new int[userNum+1][4];
        for(int[] temp : dp) {
            Arrays.fill(temp,Integer.MAX_VALUE);
        }
        // result用来存放不同用户数量时的最小结果:比如result[0]就是只有一个用户时的最小消耗
        int[] result = new int[userNum];
        Arrays.fill(result,Integer.MAX_VALUE);
        // 边界值,初始化第一个用户选择各种策略的总消耗
        for(int index=1;index <= 3;index++) {
            dp[1][index] = res[0][index-1];
            result[0] = Math.min(result[0],dp[1][index]);
        }
        dp[0][0] = 0;

        // 因为前面用户选了某个策略,后面的用户就只能选不同的;所以对应了后面用户其实有三种选择情况
        // 所有用户都可以在前面的用户选择后递推出自己的最优消耗
        for(int i=2;i<=userNum;i++) {
            dp[i][1] = Math.min(dp[i-1][2],dp[i-1][3]) + res[i-1][0];
            dp[i][2] = Math.min(dp[i-1][1],dp[i-1][3]) + res[i-1][1];
            dp[i][3] = Math.min(dp[i-1][1],dp[i-1][2]) + res[i-1][2];
            result[i-1] = Math.min(result[i-1],Math.min(Math.min(dp[i][1],dp[i][2]),dp[i][3]));
        }
        System.out.println(result[userNum-1]);
    }

}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务