您的位置:首页 > 其它

项目安排

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]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: