static void Main()
{
List<List<int>> b = new List<List<int>>();
List<List<int>> GJ = new List<List<int>>();
int[] t = new int[] { 8, 4, 5, 7, 2, 4, 2, 1, 9, 3 };
int[] s = new int[] { 6, 7, 9, 2, 8, 3, 4, 4, 5, 1 };
int[] index = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] t_copy=new int []{8, 4, 5, 7, 2, 4, 2, 1, 9, 3 };
int i, j, k;
int[] P_s = new int[10];
int[] P_t = new int[10];
for (i = 0; i < 8; i++)
{
for (j = i + 1; j < 9; j++)
{
if (t_copy[i] < t_copy[j])
{
k = index[i];
index[i] = index[j];
index[j] = k;
}
}
}
for (j = 0; j < 10; j++) //分批
{
k=0;
while (k < 10)
{
b.Add(new List<int>());
GJ.Add(new List<int>());
if (s[index[j]] + P_s[k] <= 10)
{
b[k].Add(index[j]);
GJ[k].Add(t[index[j]]);
P_s[k] = P_s[k] + s[index[j]];
k++;
break;
}
}
}
for (k = 0; k < b.Count ; k++) //求出每个批次的加工时间(最大值)
{
P_t[k] =GJ[k][0] ;
for (j = 0; j < b[k].Count ; j++)
{
if (GJ[k][j] > P_t[k])
P_t[k] = GJ[k][j];
}
}
}
思路是根据t从大到小排列后得到的索引号index,用index对s进行分批。批次之和不超
过10,否则新开辟一个批次。但是批次数事先不知道,批次数里的工件号也事先不知道,该怎么修改代码呢?