算法设计java写作业问题 小明上学,老师布置了 n 个作业,每个作业恰好需要一天做完,每个作业都有最后提交时间ti及其逾期的扣分ki。已知作业n = 3,每个作业的最后提交时间t = [1,3,1],作业逾期扣分k = [6,2,3]。以输入n = 0时作为结束,请给出小明做作业的顺序,以便扣最少的分数。
时间: 2024-02-12 22:06:38 浏览: 129
这是一个典型的贪心算法问题,按照最小化逾期扣分的原则,我们可以按照最后提交时间从小到大排序,然后依次完成作业。具体实现可以参考以下Java代码:
```java
import java.util.*;
public class Homework {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
List<HomeworkItem> items = new ArrayList<>();
int n = input.nextInt();
while (n > 0) {
int t = input.nextInt();
int k = input.nextInt();
items.add(new HomeworkItem(t, k));
n--;
}
Collections.sort(items);
int sum = 0;
int deadline = 0;
for (HomeworkItem item : items) {
deadline += item.time;
sum += item.penalty * Math.max(deadline - item.deadline, 0);
}
System.out.println(sum);
}
static class HomeworkItem implements Comparable<HomeworkItem> {
int time;
int deadline;
int penalty;
public HomeworkItem(int t, int k) {
time = t;
deadline = t;
penalty = k;
}
@Override
public int compareTo(HomeworkItem o) {
return deadline - o.deadline;
}
}
}
```
输入样例:
```
3
1 6
3 2
1 3
0
```
输出样例:
```
13
```
说明:小明按照顺序完成第1个作业(提交时间为1,逾期6分)、第3个作业(提交时间为1,逾期3分)和第2个作业(提交时间为3,逾期2分),总共扣分13分。
阅读全文