c++编程A某造船公司生产货轮A型和B型,其载重量分别为200吨、300吨,A、B型货轮的加工生产需要三种原材料,现给出年度生产目标总 吨位T (T是整数,T<1000000) ,在完成该年度目标前提下(假定三种原材料价格相同),计算生产成本最低条件时三种材料的各自采购数量。 输入说明:第- -行给出制造每艘A型货轮所需的各种材料单位数量:第二行给出制造每艘B型货轮所需的各种材料单位数量: 第三行给出年度生产目标T。 输出说明:三种原材料的需求量,两个输出数字间用一个空格分隔。
时间: 2024-04-24 10:22:05 浏览: 118
以下是一个简单的C++程序,用于解决该问题:
```c++
#include <iostream>
#include <cmath>
#include <iomanip>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std;
const int MAXN = 1005;
const double eps = 1e-10;
int n, m;
double A[MAXN][MAXN], B[MAXN], C[MAXN], ans[MAXN];
void pivot(int r, int c) {
B[r] /= A[r][c];
for (int j = 0; j <= n; j++)
if (j != c) A[r][j] /= A[r][c];
A[r][c] = 1 / A[r][c];
for (int i = 0; i <= m; i++)
if (i != r && fabs(A[i][c]) > eps) {
B[i] -= A[i][c] * B[r];
for (int j = 0; j <= n; j++)
if (j != c) A[i][j] -= A[i][c] * A[r][j];
A[i][c] = -A[i][c] * A[r][c];
}
for (int j = 0; j <= n; j++)
if (j != c) C[j] -= C[c] * A[r][j];
C[c] = -C[c] * A[r][c];
}
bool simplex(int &it, double &val) {
while (true) {
int c = 0;
for (int i = 1; i <= n; i++)
if (C[i] > C[c]) c = i;
if (fabs(C[c]) < eps) return true;
int r = 0;
double minv = 1e20;
for (int i = 1; i <= m; i++)
if (A[i][c] > eps && B[i] / A[i][c] < minv) {
minv = B[i] / A[i][c];
r = i;
}
if (minv > 1e10) return false;
pivot(r, c);
it++;
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> C[i];
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++)
cin >> A[i][j];
cin >> B[i];
}
int it = 0;
double val;
if (simplex(it, val)) {
cout << fixed << setprecision(2) << val << endl;
for (int i = 1; i <= n; i++) {
double x = 0;
for (int j = 1; j <= m; j++)
if (A[j][i] == 1) {
x = B[j];
break;
}
cout << fixed << setprecision(2) << x << " ";
}
cout << endl;
} else {
cout << "Infeasible" << endl;
}
return 0;
}
```
其中,我们使用了单纯形法求解线性规划模型,具体实现细节可以参考代码注释。
阅读全文