public class 单位时间任务时间表问题 {
public static int greedJob(int[] d,int[] w,int[]job)
{
int n = d.length -1;
d[0] = 0;
job[0] = 0;
int k = 1;
job[1] = 1;
for (int i=2; i<=n; i++)
{
int r = k;
while ((d[job[r]]) > d[i] && (d[job[r]] != r)) r--;
if ((d[job[r]] <= d[i]) && (d[i] > r))
{
for (int m=k; m>r; m--)
job[m+1] = job[m];
job[r+1] = i;
k++;
}
}
for (int i=1; i<=k; i++)
{
w[job[i]] = 0;
}
int sum = 0;
for (int i=1; i<=n; i++)
{
if (w[i]>0)
{
job[++k] = i;
sum += w[i];
}
}
return sum;
}
public static void main (String[] args) {
int[] a = {0,4,2,4,3,1,4,6};
int[] w = {0,70,60,50,40,30,20,10};
int[] job = new int[a.length];
int s = greedJob ( a,w,job );
for (int i=1; i<job.length; i++)
{
System.out.print (job[i]+" ");
}
System.out.println ();
for (int i=0; i<w.length; i++)
{
System.out.print (w[i]+" ");
}
System.out.println ();
System.out.println (s );
}
}
贪心算法应用--单位时间任务时间表问题
于 2019-07-19 13:56:19 首次发布