gride29

wersja2

Nov 19th, 2020
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.32 KB | None | 0 0
  1. using System;
  2.  
  3. struct atrakcja
  4. {
  5.     public int start;
  6.     public int koniec;
  7.  
  8.     public atrakcja(int s, int f)
  9.     {
  10.         this.start = s;
  11.         this.koniec = f;
  12.     }
  13. }
  14.  
  15.  
  16. class Program
  17. {
  18.     static void Wybor(atrakcja[] a, int[] w, int max, int min)
  19.     {
  20.         // w to tablica największej liczby atrakcji do chwili i
  21.  
  22.         w[0] = 0;
  23.  
  24.         int i = 0;
  25.  
  26.         int j = 0; // indeks atrakcji
  27.  
  28.         for (i = 1; i < max - min + 1; i++)
  29.         {
  30.             w[i] = w[i - 1]; // wynik nie gorszy niż chwilę wcześniej
  31.             // jeśli w tym momencie nie skończy się żadne wydarzenie
  32.             // to ten wynik się nie zmieni
  33.             // poniżej sorawdzę czy przypadkiem coś się nie skońćzy
  34.             // teraz kolejno sprawdzam czy o danym czasie zakonczenia mogę dołożyć zajęcia tak aby poprawic wynik
  35.             // ponieważ wydarzenia nie sa posortowane idę przez wszystkie także te już wykorzystane
  36.             for (j = 0; j < a.Length; j++)
  37.             {
  38.                 // czy gdy dodam 1 do najlepszego wyniku w momencie startu wydarzenia które się kończy
  39.                 // to wynik się poprawi? jeśli tak biorę ten poprawiony
  40.                 if (a[j].koniec - min == i && w[a[j].start - min] + 1 > w[i]) // (a[j].f - min) jest równe i
  41.                 {
  42.                     w[i] = w[a[j].start - min] + 1;
  43.                 }
  44.             }
  45.         }
  46.         // Złożoność O( (max-min) * a.Length )
  47.     }
  48.  
  49.     static void Main(string[] args)
  50.     {
  51.         atrakcja[] a ={new atrakcja (3,6), new atrakcja (1,3), new atrakcja (13,15),
  52.  
  53.             new atrakcja (2,3), new atrakcja(1,2), new atrakcja (4,7), new atrakcja (11,12),
  54.  
  55.             new atrakcja (8,11), new atrakcja (7,10), new atrakcja (11,14),
  56.  
  57.             new atrakcja (5,9), new atrakcja(2,5), new atrakcja(1,5)};
  58.  
  59.         int min = int.MaxValue;
  60.         int max = int.MinValue;
  61.  
  62.         for (int i = 0; i < a.Length; i++)
  63.         {
  64.             if (a[i].start < min) min = a[i].start;
  65.             if (a[i].koniec > max) max = a[i].koniec;
  66.         }
  67.  
  68.         int[] v = new int[max - min + 1];// wynik
  69.  
  70.         Wybor(a, v, max, min);
  71.  
  72.         for (int i = 0; i <= max - min; i++)
  73.  
  74.             Console.WriteLine("dla {0} max = {1}", i + 1, v[i]);
  75.  
  76.         Console.ReadKey();
  77.     }
  78. }
Add Comment
Please, Sign In to add comment