Advertisement
Durka007

C++

Jun 21st, 2021
805
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <ctime>
  6.  
  7. int main()
  8. {
  9.     srand((unsigned int)time(NULL));
  10.     setlocale(LC_ALL, "Rus");
  11.     const int m = 5;
  12.     const int n = 8;
  13.     const int V[n][m] ={9, 5, 2, 8, 8,
  14.                         9, 2, 4, 3, 9,
  15.                         8, 2, 7, 8, 2,
  16.                         7, 6, 9, 6, 5,
  17.                         8, 2, 2, 4, 4,
  18.                         3, 4, 7, 9, 2,
  19.                         6, 4, 7, 5, 3,
  20.                         2, 2, 4, 4, 9
  21.  
  22.     };
  23.  
  24.     int GJ[n];
  25.     int minJob=-1;
  26.     int T[n][m];
  27.     int T_min[n][m];
  28.     std::vector<int> Job(n);
  29.     for (int i = 0; i < n; i++)
  30.     {
  31.         Job[i] = i + 1;
  32.     }
  33.     int M;
  34.     std::cout << "Число перестановок(M)  = ";
  35.     std::cin >> M;
  36.     for (int i = 0; i < M; i++)
  37.     {
  38.         for (int j = n - 1; j >= 1; j--)
  39.         {
  40.  
  41.             int k = rand() % j + 1;
  42.             std::swap(Job[k], Job[j]);
  43.         }
  44.  
  45.         T[0][0] = V[Job[0] - 1][0];
  46.         for (int j = 1; j < m; j++)
  47.         {
  48.             T[0][j] = T[0][j - 1] + V[Job[0] - 1][j];
  49.         }
  50.         int k = 1;
  51.         for (int i = 1; i < n; i++)
  52.         {
  53.             for (int j = 0; j < m; j++)
  54.             {
  55.                 int max_i = 0, max_j = T[i - 1][j];
  56.                 if (j != 0)
  57.                     max_i = T[i][j - 1];
  58.                 T[i][j] = V[Job[k] - 1][j] + std::max(max_i, max_j);
  59.             }
  60.             k++;
  61.         }
  62.  
  63.         if (T[n - 1][m - 1] < minJob || minJob == -1)
  64.         {
  65.             minJob = T[n - 1][m - 1];
  66.             for (int i = 0; i < n; i++)
  67.             {
  68.                 GJ[i] = Job[i];
  69.  
  70.             }
  71.             for (int i = 1; i < n; i++)
  72.                 for (int j = 0; j < m; j++)
  73.                 {
  74.                     T_min[i][j] = T[i][j];
  75.                 }
  76.         }
  77.     }
  78.  
  79.     for (int i = 0; i < n; i++)
  80.     {
  81.         std::cout << GJ[i] << " ";
  82.     }
  83.     std::cout << std::endl;
  84.     std::cout << "minJob = " << minJob << std::endl;
  85.     std::cout << "T = " << std::endl;
  86.     for (int i = 1; i < n; i++)
  87.     {
  88.         for (int j = 0; j < m; j++)
  89.         {
  90.             std::cout.width(3);
  91.             std::cout << T_min[i][j];
  92.         }
  93.         std::cout << std::endl;
  94.     }
  95.  
  96.     return 0;
  97. }
  98.  
  99.  
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement