算最大利润的问题
告诉我个思路就行了~ 谢谢某公司要建8个销售点 a1到a8
a1a2选择 a3不能选择 a4a5中至少选择1个 a6a7至多选择1个 a4a5a8中至多选择两个
投资额不能超过700万 给一个投资额 获取最大利润 下面是投资盈利对照表
站点a1 a2 a3 a4 a5 a6 a7 a8
投资(万元)200 220 150 180 170 190 180 140
利润(万元/年)36 40 50 22 20 30 25 48
main() { int a[9],tzmun=0,lrmun=0,tzmax=0,lrmax=0,i1,i2,j1,j2,k1,m; /*a数组标记投资的销售点,tzmun用做垒加每一次投资,lrmun用做垒加利润,tzmax用做保存一种投资方案的总投资额,lrmax用做保存所有投资方案的最大利润*/ int tz[9]={0,200,220,150,180,170,190,180,140}; /*tz数组存放投资金额*/ int lr[9]={0,36,40,50,22,20,30,25,48}; /*lr数组存放利润金额*/ for(i1=1;i1<=2;i1++) { tzmun=tz[i1]; lrmun=lr[i1]; for(i2=(i1==1)?2:1;i2>=1;i2--) { if(i2==2) { tzmun+=tz[i2]; lrmun+=lr[i2]; } for(j1=4;j1<=5;j1++) { tzmun+=tz[j1]; lrmun+=lr[j1]; for(j2=(j1==4)?5:4;j2>=4;j2--) { if(j2==5) { tzmun+=tz[j2]; lrmun+=lr[j2]; } for(k1=6;k1<=7;k1++) { tzmun+=tz[k1]; lrmun+=lr[k1]; if(j2!=5) { tzmun+=tz[8]; lrmun+=lr[8]; } if(tzmun<=700) /*判断每种投资方案总金额是否小于或等于700*/ if(lrmun>lrmax) /*判断这次投资方案是否比前几次投次方案要好*/ { lrmax=lrmun; /*if语句里记下最好的投资利润、总金额和投资给哪些销售点*/ tzmax=tzmun; for(m=1;m<9;m++) a[m]=0; a[i1]=1; a[i2]=1; a[j1]=1; if(j1==4)a[j2]=1; a[k1]=1; if(j2!=5)a[8]=1; } tzmun-=tz[k1]; lrmun-=lr[k1]; if(j2!=5) { tzmun-=tz[8]; lrmun-=lr[8]; } } if(j2==5) {tzmun-=tz[j2];lrmun-=lr[j2];} } tzmun-=tz[j1];lrmun-=lr[j1]; } if(i2==2) {tzmun-=tz[i2];lrmun-=lr[i2];} } tzmun-=tz[i1];lrmun-=lr[i1]; } printf("tzmax=%d\nlrmax=%d\n\n",tzmax,lrmax); for(m=1;m<9;m++) { if(a[m]==1)printf(" a%d",m); } printf("\n"); for(m=1;m<9;m++) { if(a[m]==1)printf("%5d",tz[m]); } printf("\n"); for(m=1;m<9;m++) { if(a[m]==1)printf("%5d",lr[m]); } printf("\n\n"); }程序算出最好的投资是:a1 a5 a6 a8 总投资金额:700万 总利润:134万