1、 k+; for(int i=1;=k; wjobi=0; int sum=0; if(wi0) job+k=i; sum+=wi; return sum; public static int fasterJob(int d,int w,int job,int s) /核心算法 /d为期限数组 ,w为延迟惩罚数组,job为所选及时任务数组,s为任务安排顺序 int f=new intn+1; for(int i=0;i+)fi=i; FastUnionFind U=new FastUnionFind(n); /创建并差集 int k=0,t=0; int m=(n0)/任务可放入及时任务中 k
2、=k+1; jobk=i; sm=i;/记录及时任务放置位置 if(fm1)/同等价类的任务(同期限的任务)还有放置空间,合并等价类,确定下一等价类任务的放置位置 t=U.Find(fm-1); U.Union(t, m); else t=0;/同等价类的任务(同期限的任务)已无放置空间,下一等价类任务将为非及时任务 fm=ft; wjobi=0;/及时任务惩罚清零 for(int j=1;j0) p=parentp; while(x!=p) int temp=parentx; parentx=p; x=temp; return x; public void Union(int root1,i
3、nt root2) /将量元素集合并到同一并差集下 (同一树下) int temp=parentroot1+parentroot2; /孩子结点个数 if(root2root1) parentroot1=root2; parentroot2=temp; else parentroot2=root1; parentroot1=temp;public class Sort /合并排序类 public void mergeSort(work wo) /对work数组按延期惩罚由大到小排列 int s=1; while(swo.length) mergePass(wo,s); s+=s; public
4、 void mergePass(work wo,int s) int i=1; while(iwo.length-2*s) merge(wo,i,i+s-1,i+2*s-1); i=i+2*s; if(i+s merge(wo,i,i+s-1,wo.length-1); public void merge(work wo,int l,int m,int r) int i=l; int j=m+1; while(i=i;n-) won+1=won; woi=k; i+;import javax.swing.*;import java.util.*;public class InitialTree
5、 /窗口中的年月树 public static JTree Initial() String y=new String512; for(int i=0;=4; for(int j=0;=11; yij=(2012+i)+年+(j+1)+月;/子(月份)结点集 Hashtable hastable=new Hashtable(); hastable.put(2012+i)+,yi);/添加结点 JTree tree=new JTree(hastable); tree.setSize(300, 600); return tree;public class work implements Compa
6、rable /任物类 public String name; /任务名称 public int wast; /延迟惩罚 public int deathline; /任务期限 public String month; /任务所属年月份 public work(String name, String month,int deathline,int wast) this.name=name; this.month=month; this.deathline=deathline; this.wast=wast; public int compareTo(Object x)/任务延迟惩罚比较 int xt=(work)x).wast; if(wast); else jnew2.add(new JLabel(wojobi.name+-