ehjehxw.rar

  • AIM-97454
    了解作者
  • C/C++
    开发工具
  • 18KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2017-05-06 20:51
    上传日期
Algorithm design C source code! It is
ehjehxw.rar
  • 3ALG1.EXE
    26.2KB
  • eALG1.C
    3KB
  • ALG1.OBJ
    2.1KB
内容介绍
/**********************************************************************/ /*计科系9804班 吴敏 学号:004227 */ /**********************************************************************/ /**********************************************************************/ /*行囊问题的动态规划解法 */ /*递堆公式:F0(Y)=0 ( 0,1,2,.........,B ) Fk(Y)=MAX{Fk-1(Y);Ck+Fk(Y-Ak),Ak<=Y} (Y=0,1,2,.........,B;k=1,2,.........,N) */ /*指示器: 当Fk(Y)=Fk-1(Y)时,Pk(Y)=0;当Fk(Y)>Fk-1(Y)时,Pk(Y)=1 */ /**********************************************************************/ # include <stdio.h> # include <math.h> int xi_tb (int n, int n1, int ib1, float a[], float c[], int (*ix)[], float f[6][27], float v[6][27], int ip[6][27]) { int k,iy,iz,ii; /*********************************************************************/ /*取k=0,对所有iy=1,2,.....ib1,F(1,iy)=0 */ /*********************************************************************/ k=0; for (iy=1;iy<=ib1;iy++) { f[1][iy]=0; v[1][iy]=0; ip[1][iy]=0; for(iz=2;iz<=n1;iz++) v[iz][iy]=555; } /************************************************************************/ /*k=k+1,对所有的iy-1<a(k),置F(k+1,iy)=f(k,iy),ip(k+1,iy)=0.令iy=a(k)+1*/ /************************************************************************/ l20: k=k+1; for(iy=1;iy<=ib1;iy++) { if(iy-1-(int)a[k]<0) { f[k+1][iy]=f[k][iy]; ip[k+1][iy]=0; } } iy=(int)(a[k]+1); /*************************************************************************/ /*计算v(k+1,iy)=c(k)+f(k+1,iy-a(k)),若v(k+1,iy) rel='nofollow' onclick='return false;'>f(k,iy) 置f(k+1,iy)=v(k+1,iy),ip(k+1,iy)=1.否则置f(k+1,iy)=f(k,iy),ip(k+1,iy)=0*/ /************************************************************************/ l50: ii=iy-(int)a[k]; v[k+1][iy]=c[k]+f[k+1][ii]; if(v[k+1][iy]-f[k][iy]>0) { f[k+1][iy]=v[k+1][iy]; ip[k+1][iy]=1; } else { f[k+1][iy]=f[k+1][iy]; ip[k+1][iy]=0; } /*********************************************************************/ /*若iy<ib1,置iy=iy+1,转l50 */ /*********************************************************************/ if(iy-ib1<0) {iy=iy+1; goto l50; } if(k<n) /*若k<n,转l20,否则置iz=0*/ goto l20; iz=0; ll10: if(ip[k+1][iy]==0) { (*ix)[k]=iz; iz=0; if(k==1) return(0); k=k-1; goto ll10; /*置ix(k)=iz,iz=0,若k=1,结束,否则k=k-1,转ll10*/ } iz=iz+1; /*若ip(k+1,iy)=0,继续执行,否则置iz=iz+1*/ iy=iy-(int)a[k]; goto ll10; }/*End of Func*/ main() { float a[5]={0,6,4,3,1}; float c[5]={0,11,7,5,1}; int i,ix[5],ip[6][27]; float f[6][27],v[6][27]; xi_tb(4,5,26,a,c,&ix,f,v,ip); for (i=1;i<=4;i++) printf("\nX(%d)=%d",i,ix[i]); }/* End of main */ 
评论
    相关推荐