日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Find non-overlap jobs with max cost

發布時間:2023/12/13 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Find non-overlap jobs with max cost 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  

Given a set of n jobs with [start time, end time, cost] find a subset so that no 2 jobs overlap and the cost is maximum.
Job: (start_time, end_time] --- cost

如果只是求maxCost, 一維就可以做。

但是如果要知道有選了哪些job,則需要存成二維。

?

1 package leetcode; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Comparator; 6 7 class Job{ 8 Integer start_time; 9 Integer end_time; 10 Integer cost; 11 public Job(Integer s, Integer e, Integer c){ 12 start_time = s; 13 end_time = e; 14 cost = c; 15 } 16 17 public String toString(){ 18 StringBuilder sb = new StringBuilder(); 19 sb.append("Job: start [" + start_time + "], end ["+ end_time + "], cost [" + cost + "];"); 20 return sb.toString(); 21 } 22 } 23 24 public class FindNonOverlapJobs { 25 public static ArrayList<Job> findJobsWithMaxCost(Job[] jobList){ 26 ArrayList<Job> result = new ArrayList<Job> (); 27 if(jobList == null || jobList.length == 0) return result; 28 Arrays.sort(jobList, new Comparator<Job>(){ 29 public int compare(Job j1, Job j2){ 30 return j1.end_time > j2.end_time ? 1 : (j1.end_time == j2.end_time ? 0 : -1); 31 } 32 }); 33 int len = jobList.length; 34 int[][] dp = new int[len + 1][jobList[len - 1].end_time + 1]; 35 for(int i = 1; i <= len; i ++){ 36 Job tmp = jobList[i - 1]; 37 int start = tmp.start_time; 38 int end = tmp.end_time; 39 for(int j = 0; j < dp[0].length; j ++){ 40 if(j < end){ 41 dp[i][j] = dp[i - 1][j]; 42 }else if(j == end){ 43 dp[i][j] = Math.max(dp[i - 1][start] + tmp.cost, dp[i - 1][j]); 44 }else{ 45 dp[i][j] = dp[i][j - 1]; 46 } 47 } 48 } 49 50 int i = dp[0].length - 1; 51 while(i > 0){ 52 if(dp[len][i] == dp[len][i - 1]) i --; 53 else{ 54 int j = len; 55 while(j > 0 && dp[j][i] == dp[j - 1][i]) j --; 56 result.add(jobList[j - 1]); 57 i --; 58 } 59 } 60 return result; 61 } 62 63 public static void main(String[] args){ 64 Job[] test = new Job[5]; 65 test[0] = new Job(1,3,4); 66 test[1] = new Job(3,5,2); 67 test[2] = new Job(2,3,3); 68 test[3] = new Job(1,2,2); 69 test[4] = new Job(2,6,3); 70 ArrayList<Job> result = findJobsWithMaxCost(test); 71 for(int i = 0; i < result.size(); i ++){ 72 System.out.println(result.get(i).toString()); 73 } 74 } 75 }

Output:

Job: start [3], end [5], cost [2];

Job: start [2], end [3], cost [3];

Job: start [1], end [2], cost [2];

?

轉載于:https://www.cnblogs.com/reynold-lei/p/4390148.html

總結

以上是生活随笔為你收集整理的Find non-overlap jobs with max cost的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。