讨论 / 为什么只有20分。。。
suksyr 2013-03-10 00:33:00
点我顶贴 收藏 删除
基本思路是机器加工总时间短的最先执行,找顺序当中第一个符合这个机器的工件。没有符合的就找机器加工时间第二短的。。。

#include<stdio.h>

#include<string.h>

main()

{int a,b,c,d,m,n,i,p,q;/*a所用机器,c,i做循环,m,n为机器,工件数*/

int e[401],f[21][21][3],g[21][2],count[21];/*f为工件工序,所用机器,所用时间,完成情况

g为机器加工工件,h为工件进行到第几工序*/

int h[21];

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

h[i]=1;

memset(f,0,sizeof(f));

scanf("%d %d",&m,&n);

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

f[i][0][2]=1;

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

scanf("%d",&e[i]);

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

for(c=1;c<=m;c++)

scanf("%d",&f[i][c][0]);

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

for(c=1;c<=m;c++)

scanf("%d",&f[i][c][1]);

memset(g,0,sizeof(g));

s:

memset(count,0,sizeof(count));

d=g[1][0];

a=1;

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

if(g[i][0]<d)

{d=g[i][0];

a=i;}

eve:

f[g[a][1]][h[g[a][1]]-1][2]=1;

d=1;

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

{p=e[i];

if(e[i]!=0)

if(f[p][h[p]][0]==a && f[p][h[p]-1][2]==1)

{e[i]=0;

g[a][0]=g[a][0]+f[p][h[p]][1];

h[p]++;

g[a][1]=p;

d=0;

break;}}

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

if(d==1 && f[c][m][2]==0)

{count[a]=1;

b=1000;

a=1;

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

if (g[i][0]<b && count[i]==0)

{b=g[i][0];

a=i;}

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

if(count[i]==1)

g[i][0]=g[a][0];

goto eve;

}

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

if(f[i][m][2]==0)

goto s;

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

if(g[i][0]>d)

d=g[i][0];

printf("%d",d);

return 0;

}

查看更多回复
提交回复