// JobSchedule.cpp : 定义控制台应用程序的入口点。
//
//t=T-sum(ai)=sum(bi)+sum(si)-sum(ai),as sum(si)>=0,so t>=sum(bi)-sum(ai); as sum(si) void MinSchTime(int *a,int *b,int n,int *T,int m,int t,int *solution) { unsigned int s=0,max=1; int i=0; for(;i { for(s=1;s int len=0; for(int tmp=s;tmp>0;tmp/=2) if(tmp%2)len++; if(len!=i){ s++; continue; } //////////////////////////////// for(int l=0;l unsigned int s2=s,minum=0xffffffff,bestj=-1; for(int j=0;s2>0;j++) { if(s2%2)//第j位为1 { int sub=1; for(int k=1;k<=j;k++)sub*=2; int s3=s-sub; int ss=l-a[j]; unsigned int tt=a[j]+T[s3*t+b[j]+(l-a[j]>0?l-a[j]:0)]; if(minum>tt) { minum=tt; bestj=j; } } s2/=2; } T[s*t+l]=minum; solution[(i-1)*t+l]=bestj; } s++; } } } int c(int m,int n) { int t=1,i=1; for(;i<=n;i++)t*=i; int b1=1,b2=1; for(i=1;i<=m;i++)b1*=i; for(i=1;i<=n-m;i++)b2*=i; return t/(b1*b2); } void PrintSolution(unsigned int s,int l,int t,int * a,int *b,int *solution) { } int _tmain(int argc, _TCHAR* argv[]) { int count=0; printf(\"Please input job count:\"); scanf(\"%d\ int *a=new int[count*2]; int *b=a+count; memset(a,0,count*2); printf(\"Please input all a and b:\\n\"); int i=0; for(;i printf(\"Job%d:\ scanf(\"%d\ scanf(\"%d\ } int m=0,t=0; for(i=0;i<=count;i++) m+=c(i,count); for(i=0;i int *solution=new int[count*t]; MinSchTime(a,b,count,T,m,t,solution); printf(\"The min time is:%d\\n\ return 0; } 因篇幅问题不能全部显示,请点此查看更多更全内容