美文网首页Leetcode && Lintcode
[编程题] 双核处理

[编程题] 双核处理

作者: 六尺帐篷 | 来源:发表于2017-08-10 14:00 被阅读47次

    一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。
    输入描述:
    输入包括两行:
    第一行为整数n(1 ≤ n ≤ 50)
    第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。

    输出描述:
    输出一个整数,表示最少需要处理的时间

    输入例子1:
    5
    3072 3072 7168 3072 1024

    输出例子1:
    9216

    分析

    背包问题的变种

    代码

    import java.util.*;
     
    public class Main {
        public static void main(String[] args) {
             
            Scanner in = new Scanner(System.in);
             
            while(in.hasNext()) {
                int n = in.nextInt();
                int[] task = new int[n];
                int sum = 0;
                for(int i=0;i<n;i++) {
                    task[i] = in.nextInt() / 1024;
                    sum += task[i];
                }
                int res = solve(task, sum/2);
                res = Math.max(res, sum-res) * 1024;
                System.out.println(res);
            }
            in.close();
             
             
        }
         
        private static int solve(int[] task, int sum) {
             
            int[] dp = new int[sum+1];
             
            for(int i=0;i<task.length;i++) {
                for(int j=sum;j>0;j--) {
                    if(j >= task[i])
                        dp[j] = Math.max(dp[j], dp[j-task[i]] + task[i]);
                }
            }
            return dp[sum];
        }
    }
    

    相关文章

      网友评论

        本文标题:[编程题] 双核处理

        本文链接:https://www.haomeiwen.com/subject/ucjhrxtx.html