项目安排
2016-03-22 13:26
381 查看
小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项目之间不能有时间重叠,但是一个项目刚结束,就可以立即做另一个项目,即项目起止时间点可以重叠)。
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; class Project { private int start = 0; private int end = 0; private int value = 0; public Project(int start, int end, int value) { super(); this.start = start; this.end = end; this.value = value; } public int getStart() { return start; } public void setStart(int start) { this.start = start; } public int getEnd() { return end; } public void setEnd(int end) { this.end = end; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } @Override public String toString() { return "Project [start=" + start + ", end=" + end + ", value=" + value + "]"; } } public class Main { private static void init(int a[]) { for (int i = 0; i < a.length; i++) { a[i] = 0; } } public static void main(String[] args) { Scanner cin = new Scanner(System.in); List<Project> list = new ArrayList<Project>(); while (cin.hasNext()) { int n = cin.nextInt(); int dp[] = new int ; init(dp); for (int i = 0; i < n; i++) { int start = cin.nextInt(); int end = cin.nextInt(); int value = cin.nextInt(); list.add(new Project(start, end, value)); } Collections.sort(list, new Comparator<Project>() { @Override public int compare(Project o1, Project o2) { return o1.getEnd() - o2.getEnd(); } }); // dp[i]表示前i个项目的最大价值 dp[0] = list.get(0).getValue(); for (int i = 1, length = list.size(); i < length; i++) { int start = list.get(i).getStart(); int value = list.get(i).getValue(); //第i个项目做还是不做 dp[i] = Math.max(value, dp[i-1]); for (int j = i - 1; j >= 0; j--) { int pre_end = list.get(j).getEnd(); if (pre_end <= start) { //前j个加上第i个 dp[i] = Math.max(dp[i], dp[j] + value); break; } } } System.out.println(dp[n-1]); } } }
相关文章推荐
- JVM的垃圾收集机制和内存分配策略
- navigationController POP回 固定界面
- Mysql服务器如何得到最佳性能优化
- HTTP中的幂等性
- oc-06-无参方法的调用
- 杂
- iOS9.3
- 如何一招永久删除hao123流氓网页挟持
- NTFS文件系统详解(二)之MBR(EBR)基本信息
- 苹果春季新品发布会,黑马程序员iOS课程同步更新
- 加载gif图片的方法:(需要SDWebImage方法)
- 毕业设计——登录界面设计
- nyoj 106 背包问题 (贪心 (硬币问题))
- spring 加载多个资源文件
- 【笔记】《C#大学教程》- 第14章 多线程
- 三种多线程简介及使用方法
- [LeetCode]Generalized Abbreviation
- 继承
- 宋仲基《太阳的后裔》实力撩妹 男星军装造型谁最帅?
- ES2015 - Function (5)