【司机调度问题】

调度中心将司机平均分给A、B两个区域,i号司机去A的收入为income[i][0]

去B的收入为income[i][1],返回最高收入

public static int maxMoney1(int income[][]){
        if(income==null||income.length<2||(income.length&1)!=0){
            return 0;
        }
        int N=income.length;
        int M=N>>1;
        return process1(income,0,M);
    }
    public static int process1(int income[][],int index,int rest){
        if(index==income.length){
            return 0;
        }
        if(income.length-index==rest){
            return income[index][0]+process1(income,index+1,rest-1);
        }
        if(rest==0){
            return income[index][1]+process1(income,index+1,rest);
        }
        int p1=income[index][0]+process1(income,index+1,rest-1);
        int p2=income[index][1]+process1(income,index+1,rest);
        return Math.max(p1,p2);
    }
    public static int maxMoney2(int income[][]){
        int N=income.length;
        int M=N>>1;
        int dp[][]=new int[N+1][M+1];
        for (int i = N-1; i >=0; i--) {
            for (int j = 0; j <=M ; j++) {
                if(N-i==j){
                    dp[i][j]=income[i][0]+dp[i+1][j-1];
                }else if(j==0){
                    dp[i][j]=income[i][1]+dp[i+1][j];
                }else{
                    int p1 = income[i][0] + dp[i + 1][j - 1];
                    int p2 = income[i][1] + dp[i + 1][j];
                    dp[i][j] = Math.max(p1, p2);
                }
            }
        }
        return dp[0][M];
    }
    public static int[][] randomMatrix(int len, int value) {
        int[][] ans = new int[len << 1][2];
        for (int i = 0; i < ans.length; i++) {
            ans[i][0] = (int) (Math.random() * value);
            ans[i][1] = (int) (Math.random() * value);
        }
        return ans;
    }
    public static void main(String[] args) {
        int N = 10;
        int value = 100;
        int testTime = 500;
        System.out.println("测试开始");
        for (int i = 0; i < testTime; i++) {
            int len = (int) (Math.random() * N) + 1;
            int[][] matrix = randomMatrix(len, value);
            int ans1 = maxMoney1(matrix);
            int ans2 = maxMoney2(matrix);
            //int ans3 = maxMoney3(matrix);
            if (ans1 != ans2 ) {
                System.out.println(ans1);
                System.out.println(ans2);
                //System.out.println(ans3);
                System.out.println("Oops!");
            }
        }
        System.out.println("测试结束");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Python中,调度问题主要是指如何合理地调度任务,避免I/O操作占用大量的CPU计算时间。协程是Python中实现调度的一种方式。使用yield表达式可以实现一个最基本的协程调度示例。协程的特点是能够在执行过程中暂停和恢复,从而实现任务的切换和调度。 对于解决Python的任务调度问题,可以采取以下几种方法: 1. 方案1:使用线程方式实现任务调度。通过创建多个线程,每个线程负责执行一个任务,利用线程的特性实现任务的并发执行。 2. 方案2:使用函数方式实现任务调度。通过定义多个函数,每个函数表示一个任务,然后在主程序中通过循环调用这些函数,实现任务的顺序执行。 3. 方案3:在主程序段中实现循环。将所有任务都放在主程序段中,并通过循环的方式依次执行这些任务,以实现任务的调度和执行。 在解决调度问题时,需要注意以下几点: - 程序中的无限循环是否位于主程序中或函数中,这会影响程序的运行效率和任务的执行顺序。 - 调度问题与操作系统的任务调度机制无关,主要与Python的任务调度机制有关。 - 在主程序中运行的代码通常具有较高的优先级,而函数中的代码可能由于某种原因导致运行效率降低。 总之,调度问题是通过合理地使用协程和选择适当的方法来实现任务的调度和执行。具体的解决方案可以根据实际情况选择,并进行适当的调整和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值