當前位置:編程學習大全網 - 編程語言 - 獨立任務最優調度問題

獨立任務最優調度問題

建立狀態T[i][k],整數類型,表示前k個任務中,在A機器上用時小於等於i時,在B機器上的最小用時。T[i][k]=min{ T[i-A[k]][k-1], T[i][k-1]+B[k]};表示若將第k個任務分給A處理,B最少用時為T[i-A[k]][k-1];若將第k個任務分給B處理則,B最少用時為T[i][k-1]+B[k]。

min{max(i,T[i][n]}即為最短處理時間。

源代碼如下:

#include<stdio.h>

#include<stdlib.h>

int T[2000]={0};

int main()

{

int n;

int i,j,k,sa=0,sb=0,min=100000000;

int A[201],B[201],x=0;

FILE *fp;

fp=fopen("sched8.in","r");

fscanf(fp,"%d",&n);

for(i=1;i<=n;i++)

{

fscanf(fp,"%d",&A[i]);

sa+=A[i];

}

for(i=1;i<=n;i++)

{

fscanf(fp,"%d",&B[i]);

sb+=B[i];

}

for(k=1;k<=n;k++)

{

for(i=sa;i>=0;i--)

{

if(i>=A[k])

{

T[i]=T[i-A[k]]<T[i]+B[k]?T[i-A[k]]:T[i]+B[k];

}

else

T[i]=T[i]+B[k];

}

}

for(i=0;i<=sa;i++)

{

k=i>T[i]?i:T[i];

if(k<min)

min=k;

}

printf("%d",min);

system("pause");

return 0;

}

因為填第k列時,只依賴於第k-1列,可以再壓縮成壹維空間。

源代碼:

#include<stdio.h>

#include<stdlib.h>

char T[2000][2000][201]={0};

int main()

{

int n;

int i,j,k,sa=0,sb=0,min=100000000;

int A[201],B[201];

FILE *fp;

fp=fopen("sched10.in","r");

fscanf(fp,"%d",&n);

for(i=1;i<=n;i++)

{

fscanf(fp,"%d",&A[i]);

sa+=A[i];

}

for(i=1;i<=n;i++)

{

fscanf(fp,"%d",&B[i]);

sb+=B[i];

}

T[0][0][0]=1;

for(k=1;k<=n;k++)

{

for(i=0;i<=sa;i++)

{

for(j=0;j<=sb;j++)

{

if(i>=A[k]&&T[i-A[k]][j][k-1]==1)

T[i][j][k]=1;

if(j>=B[k]&&T[i][j-B[k]][k-1]==1)

T[i][j][k]=1;

}

}

}

for(i=0;i<=sa;i++)

{

for(j=0;j<=sb;j++)

{

if(T[i][j][n]==1)

{

k=i>j?i:j;

if(k<min)

min=k;

}

}

}

printf("%d",min);

system("pause");

return 0;

}

  • 上一篇:鄭州這邊比較好的軟件開發公司都有哪些?最好是成立時間比較早的。
  • 下一篇:C語言大作業,C語言高手們救下小弟啊```
  • copyright 2024編程學習大全網