装配线调度
#include<iostream>
using namespace std;
int a[3][7], t[3][7], e[3], x[3];
int f[3][7], l[3][7];
int n = 6;
/***************************************************
** l[i][j]存储经过装配站j-1所在装配线
** f[1][0]和f[2][0]存储最短时间
** l[1][0]和l[2][0]存储最后一个装配站所在装配线
***************************************************/
void Fastest_Way ()
{
f[1][1] = e[1] + a[1][1];
f[2][1] = e[2] + a[2][1];
for (int j = 2; j <= n; j++)
{
if (f[1][j - 1] + a[1][j] <= f[2][j - 1] + t[2][j - 1] + a[1][j])
{
f[1][j] = f[1][j - 1] + a[1][j];
l[1][j] = 1;
}
else
{
f[1][j] = f[2][j - 1] + t[2][j - 1] + a[1][j];
l[1][j] = 2;
}
if (f[2][j - 1] + a[2][j] <= f[1][j - 1] + t[1][j - 1] + a[2][j])
{
f[2][j] = f[2][j - 1] + a[2][j];
l[2][j] = 2;
}
else
{
f[2][j] = f[1][j - 1] + t[1][j - 1] + a[2][j];
l[2][j] = 1;
}
}
if (f[1][n] + x[1] <= f[2][n] + x[2])
{
f[1][0] = f[2][0] = f[1][n] + x[1];
l[1][0] = l[2][0] = 1;
}
else
{
f[1][0] = f[2][0] = f[2][n] + x[2];
l[1][0] = l[2][0] = 2;
}
}
void Print_Stations ()
{
int i = l[1][0];
int j;
cout << "最快装配路线:" << endl;
cout << "line " << i << ", station " << n << endl;
for (j = n; j > 1; j--)
{
i = l[i][j];
cout << "line " << i << ", station " << j - 1 << endl;
}
}
void Input ()
{
int i, j;
cout << "输入在装配站S(i,j)的装配时间a(i,j):" << endl;
for (i = 1; i <= 2; i++)
{
for (j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
cout << "输入进入装配线i的花费时间e(i):" << endl;
for (i = 1; i <= 2; i++)
cin >> e[i];
cout << "输入从s(i,j)站转移到另一条装配线的时间t(i,j):" << endl;
for (i = 1; i <= 2; i++)
{
for (j = 1; j < n; j++)
{
cin >> t[i][j];
}
}
cout << "输入从装配线i离开的花费时间x(i):" << endl;
for (i = 1; i <= 2; i++)
cin >> x[i];
}
int main()
{
Input ();
Fastest_Way ();
Print_Stations ();
system ("pause");
return 0;
}
矩阵链乘法
#include<iostream>
using namespace std;
#define M 1000000
int n;
int m[101][101] = {0};
int s[101][101] = {0};
void Matrix_Chain_Order (int* p)
{
for (int i = 1; i <= n; i++)
m[i][i] = 0;
for (int l = 2; l <= n; l++)
{
int i, j, k, q;
for (i = 1; i <= n - l + 1; i++)
{
j = i + l - 1;
m[i][j] = M;
for (k = i; k < j; k++)
{
q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
if (q < m[i][j])
{
m[i][j] = q;
s[i][j] = k;
}
}
}
}
}
void Print_Optimal_Parens (int i, int j)
{
if (i == j)
cout << 'A' << i;
else
{
cout << '(';
Print_Optimal_Parens (i, s[i][j]);
Print_Optimal_Parens (s[i][j] + 1, j);
cout << ')';
}
}
int main()
{
int p[101];
while (cin >> n)
{
for (int i = 0; i <= n; i++)
cin >> p[i];
Matrix_Chain_Order (p);
cout << m[1][n];
Print_Optimal_Parens (1, n);
cout << endl;
}
return 0;
}