="justify"> {. Rows. Add ();
} (int j=0; j lt; M + 1; j ++) (int i=0; i lt; str; i ++) [j, i]. Value=T [i, j] ;. AutoResizeColumns ();
} void button1_Click (object sender, EventArgs e)
{. Clear ();
//розмір вихідної матріциM=dataGridView1. ColumnCount - 1;// Столбциstr=dataGridView1. RowCount - 1;// Рядки N=21;// Кількість рабочіхi=0, j=0, s=0, p=N, t=0; text= raquo ;;// Сюди буде міститися решеніеansw= raquo ;;// Сюди буде поміщений відповідь
int [,] a=new int [str, M + 1];// Вихідна матриця
int [,] T=new int [str, M];// Матриця часу виконання [] rabs=new int [N + 1];// Масив з кількістю працівників
int [] U=new int [str];// Масив управління [] sost2, sost3, sost4, sost5, sost6;
int step=0;// Кроки [] difMas1=new int [] {0};// Тимчасові масиви для зберігання унікальних станів (кількостей працівників)
int [] difMas2=new int [] {0}; [] difMas3=new int [] {0};
int n=0; [,] temp21, temp22;// Тимчасові матриці для 2 кроки [,] tab2;// Підсумкова т-ца для 2 кроки
int [,] temp31, temp32, tab3, temp41, temp42, tab4, temp51, temp52, tab5, temp61, temp62, tab6; [] answer=new int [M]; ans=false; += r nРазмерность: M= + (M + 1) + str= + Str + r nІсходная матриця: r n raquo ;; (j=0; j lt; str; j ++)
{(i=0; i lt; M + 1; i ++)
{[j, i]=Convert. ToInt32 (dataGridView1 [i, j]. Value); +=a [j, i]. ToString () + raquo ;;
} += r n raquo ;;
} += r nМатріца часу виконання: r n raquo ;;
for (j=0; j lt; str; j ++)
{(i=1; i lt; M + 1; i ++)
{[j, i - 1]=Convert. ToInt32 (dataGridView1 [i, j]. Value); +=T [j, i - 1]. ToString () + raquo ;;
} += r n raquo ;;
}
//Заполененіе матриці працівників
for (i=0; i lt;=N; i ++) [i]=i;
//Заполененіе матриці управління (i=0; i lt; str; i ++)
U [i]=a [i, 0];
//КРОК 1
step=1; += r n tШаг1: Розподіл працівників для виконання робіт на першому складі r n raquo ;;
int [,] tab1=new int [str, 3]; (i=0; i lt; str; i ++)
{[i, 0]=a [i, 0]; [i, 1]=a [i, 0]; [i, 2]=T [i, 0];
} += r nІтоговая таблиця після + step + кроку raquo ;;
text +=print (tab1);
//КРОК 2 (step + 1 lt;=M)
{
step=2; += r n tШаг2: Розподіл працівників між першим і другим складами r n raquo ;;=tab1. GetLength (0);// Кількість рядків попередньої т-ці=new int [str, n];// Кількість шпальт одно кол-ву рядків попередньої т-ці
temp22=new int [str, n];
sost2=new int [1];
//заповнення матриці, відповідної значенням в нижній частині клітини += r nМатріца, відповідна значенням в нижній частині клітини r n raquo ;;
for (i=0; i lt; str; i ++) (j=0; j lt; n; j ++)
{[i, j]=a [i, 0] + tab1 [j, 0]; (temp21 [i, j] gt; N) temp21 [i, j]=- 1;
} +=print (temp21);
//заповнення матриці, відповідної значенням у верхній частині клітини += r nМатріца, відповідна значенням у верхній частині клітини r n raquo ;;
for (i=0; i lt; str; i ++) (j=0; j lt; n; j ++) (temp21 [i, j]!=- 1) [i, j] =max (a [i, 2], a [j, 1]); temp22 [i, j]=- 1; +=print (temp22);
//Виклик функції для знаходження унікальних значень кількості працівників та мінімального часу
countDifEl (temp21, temp22, U, tab1, ref difMas1, ref difMas2, ref difMas3, ref sost2);=new int [difMas1. Length, 3]; (i=0; i lt; difMas1. Length; i ++)
{[i, 0]=difMas1 [i]; tab2 [i, 1]=difMas3 [i]; tab2 [i, 2]=difMas2 [i];
} += r nІтоговая таблиця після + Step + кроку raquo ;;
text +=print (tab2); (step + 1 lt;=M)
{
//КРОК 3=3; += r n tШаг3: Розподіл працівників між першим, другим і третім складами r n raquo ;;=tab2. GetLength (0);// Кількість рядків попередньої т-ці=new int [str, n];// Кількість шпальт одно кол-ву рядків попередньої т-ці
temp32=new int [str, n];
sost3=new int [1];
//заповнення матриці,...