某工业生产部门根据国家计划的安排,拟将某种高效率的5台机器,分配给所属的A,B,C3个工厂各工厂载获得这种机器后,可以为国家盈利如下表所示,问:这5台机器如何分配给各工厂,才能使国家盈利最大?
|
S |
A |
B |
C |
|
0 |
0 |
0 |
0 |
|
1 |
3 |
5 |
4 |
|
2 |
7 |
10 |
6 |
|
3 |
9 |
11 |
11 |
|
4 |
12 |
11 |
12 |
|
5 |
13 |
11 |
12 |
其中,第一列S为机器台数,A、B、C3列为3个工厂在拥有不同台数的机器时的盈利值。
设计思想:先求出n个机器在A、B分配时的最佳盈利情况,并用AB[6]保存,再求出n个机器在A、B、C分配时最佳的盈利情况。并分别算出对应的A、B、C所需要的台数。
#include<stdio.h>
int main(void)
{
//A、B、C拥有的机器数和盈利情况的对应关系
int A[6]={0,3,7,9,12,13};
int B[6]={0,5,10,11,11,11};
int C[6]={0,4,6,11,12,12};
int AB[6][6];//A、B分配到n个机器时的盈利情况
int AB_Max[6];//A、B分配到n个机器时的最大盈利情况
int abc[6];//增加C工厂后的盈利情况
int max;
int flag;
int i,j,k;
//A、B共分配到i个机器时的最大盈利
for(i=0;i<=5;i++)//i为分配给A B的总机器数,j为分配给B工厂的机器数
{
max=0;
for(j=0;j<=i;j++)
{
AB[i][j]=A[i-j]+B[j];
if(AB[i][j]>max)
max=AB[i][j];
}
AB_Max[i]=max;
}
//增加c工厂后,将5台机器分配给A B C时最大盈利
max=0;
for(j=0;j<=5;j++)//j为分配给C工厂的机器数,5-j为分配给A B的总机器数
{
abc[j]=AB_Max[5-j]+C[j];
if(abc[j]>max)
{
max=abc[j];
flag=j;
}
}
printf("最大盈利为:%d\n",max);
printf("C工厂分配的机器数量为:%d\n",flag);
max=max-C[flag];
int AB_Num=5-flag;
for(i=0;i<=AB_Num;i++)//i为分配给B工厂的机器数
{
if(AB[AB_Num][i]==max)
{
printf("B工厂分配的机器数量为:%d\n",i);
printf("A工厂分配的机器数量为:%d\n",AB_Num-i);
break;
}
}
return 0;
}
931



被折叠的 条评论
为什么被折叠?



