在百度知道上回答的一个有意思小算法题。
题目:
今已知半年内,各月份的需求量及生产该部件每单位数所需工时数如下表所示: 月份 k 1 2 3 4 5 6 月需求量bk 8 5 3 2 7 4 单位工时ak 11 18 13 17 20 10 设库存容量H = 9,开始时库存量为2,期终库存量为0。要求制定一个半年逐月生产计划,使得既满足需求和库存容量的限制,又使得总耗费工时数最少。
我的解答,在vs2008下编译通过:
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
const int 库容=9;
int 库存量 = 2;
int 月需[7]={0,8,5,3,2,7,4};
int 月工时[7]={0,11,18,13,17,20,10};
int 总工时=0;
int 月生产[7]={0};
for (int i=1;i<=6; i++)
{
int 本月必生产 = 月需[i]-库存量;
if (本月必生产 > 0)
{
库存量 = 0;
总工时 += 本月必生产*月工时[i];
月生产[i] += 本月必生产;
}
else
{
库存量 = 本月必生产*(-1);
}
//额外生产
int 虚拟库存 = 库存量;
for (int j=i+1;j<=6; j++)
{
if (月工时[i] < 月工时[j])
{
if (虚拟库存 >= 月需[j])
{
虚拟库存 -= 月需[j];
continue;
}
虚拟库存 = 0;
int 库空余 = 9-库存量;
if (库空余 > 0)
{
if(库空余>=月需[j])
{
总工时 += 月需[j]*月工时[i];
库存量 += 月需[j];
月生产[i] += 月需[j];
}
else
{
总工时 += 库空余*月工时[i];
库存量 = 9;
月生产[i] += 库空余;
break;
}
}
else
{
break;
}
}
else
{
break;
}
}
}
cout << "月生产: ";
for (int i = 1; i<=6; i++)
{
cout << "[" << 月生产[i] << "]";
}
cout << endl;
cout << "总工时: " << 总工时 << endl;
return 0;
}
结果输出:
月生产: [15][0][8][0][0][4]
总工时: 309