我做的第二问 用C语言实现穷举法:
程序如下:
#include<stdio.h>
void main()
{
int k,i,n=2;
int j=19;
int a[20];
float maxp=0,maxv=0,mp=0,mv=0;
float v[20]={20,23,25,28,31,42,53,61,62,70,74,83,97,98,102,112,118,125,128,130};
float p[20]={1.10,1.46,1.47,1.83,1.84,1.67,2.08,3.70,3.70,4.25,4.28,5.06,5.61,5.80,6.10,6.60,6.84,7.41,7.42,7.45};
for(n=0;n<=1048576;n++)
{
j=19;
for(i=0;i<20;i++)
{
a[i]=(n>>j)&1;
j--;
}
/* for(i=0;i<20;i++)
{
printf("%d ",a[i]);
}*/
for(k=0;k<20;k++)
{
if(maxv+v[k]<=600)
{
maxp=p[k]*a[k]+maxp;
maxv=v[k]*a[k]+maxv;
/*printf("%f %f\n",maxp,maxv);*/
}
if(maxp>mp)
{
mp=maxp;
mv=maxv;
}
}
}
printf("%f %f\n",mp,mv);
}
程序如下:
#include<stdio.h>
void main()
{
int k,i,n=2;
int j=19;
int a[20];
float maxp=0,maxv=0,mp=0,mv=0;
float v[20]={20,23,25,28,31,42,53,61,62,70,74,83,97,98,102,112,118,125,128,130};
float p[20]={1.10,1.46,1.47,1.83,1.84,1.67,2.08,3.70,3.70,4.25,4.28,5.06,5.61,5.80,6.10,6.60,6.84,7.41,7.42,7.45};
for(n=0;n<=1048576;n++)
{
j=19;
for(i=0;i<20;i++)
{
a[i]=(n>>j)&1;
j--;
}
/* for(i=0;i<20;i++)
{
printf("%d ",a[i]);
}*/
for(k=0;k<20;k++)
{
if(maxv+v[k]<=600)
{
maxp=p[k]*a[k]+maxp;
maxv=v[k]*a[k]+maxv;
/*printf("%f %f\n",maxp,maxv);*/
}
if(maxp>mp)
{
mp=maxp;
mv=maxv;
}
}
}
printf("%f %f\n",mp,mv);
}