算最大利润的问题
告诉我个思路就行了~ 谢谢某公司要建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万