Hdu 4864(Task 贪心)
题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个任务可获奖励500x+2y。求完成最多任务前提下可获得最高奖励,输出任务数和奖励数。
解法:对机器和任务进行排序,x和y都从大到小排。循环考察每一个任务,把满足每一个任务x值的机器等级都记录下来,然后用满足任务等级的最小等级机器完成此任务。这样的做法可以保证:
- 前面的任务执行比后面的任务可获的奖励更高(排序)
- 满足前面任务x值的机器一定满足后面的任务
- 完成任务数是最多的(每次使用最小化等级)
import java.io.*;import java.util.*;public class Main{ private static final int N=100005; private static class node{ int x,y; }; private static class cmp implements Comparator{ @Override public int compare(node a,node b){ if(a.x == b.x){ if(a.y==b.y) return 0; return a.y =s2[i].x){ book[s1[j].y]++; j++; } for(int k=s2[i].y;k<=100;k++){ if(book[k]>0){ book[k]--; sum+=(s2[i].x*500+s2[i].y*2); cnt++; break; } } } System.out.println(cnt+" "+sum); } sc.close(); }}