Guest User

Untitled

a guest
Feb 20th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.57 KB | None | 0 0
  1. // dist1[0] и dist2[0] всегда - это особенность моей программы
  2. // еще были dist1[1] и dist2[1] но они оказались не нужны
  3.  
  4. // 0,1,2 - цвет - никакой, 1-ой компании, 2-ой компании
  5.  
  6. dp[0][0] = 0;
  7. dp[1][0] = dp[2][0] = 1;
  8.  
  9. for (int i = 0; i < k-1; i++) {
  10.  
  11.     //next = TODO
  12.  
  13. dp[0][next] = max(
  14.         dp[0][prev] + dist1[0][prev] + dist2[0][prev] - 2,
  15.         dp[1][prev] + dist1[0][prev] + dist2[0][prev] - 2,
  16.         dp[2][prev] + dist1[0][prev] + dist2[0][prev] - 2
  17.     );
  18.  
  19. dp[1][next] = max(
  20.         dp[0][prev] + f(dist1[0][prev], 0, 0) + f(dist2[0][prev], 0, 0) - 1,
  21.         dp[1][prev] + f(dist1[0][prev], 0, 1) + f(dist2[0][prev], 0, 1) - 1,
  22.         dp[2][prev] + f(dist1[0][prev], 1, 0) + f(dist2[0][prev], 1, 0) - 1
  23.     );
  24.  
  25. dp[2][next] = max(
  26.         dp[0][prev] + f(dist1[0][prev], 0, 0) + f(dist2[0][prev], 0, 0) - 1,
  27.         dp[1][prev] + f(dist1[0][prev], 1, 0) + f(dist2[0][prev], 1, 0) - 1,
  28.         dp[2][prev] + f(dist1[0][prev], 0, 1) + f(dist2[0][prev], 0, 1) - 1
  29.     );
  30.  
  31.     prev = next;
  32. }
  33.  
  34. // теперь надо слить 0 (next) и k-1 (prev) состояния (9 вариантов)
  35. // примерно так
  36. if (best < dp[0][prev] + dist1[0][prev] + dist2[0][prev] - 2 - dp[0][next]) {
  37.     best = dp[0][prev] + dist1[0][prev] + dist2[0][prev] - 2 - dp[0][next];
  38.  
  39.     // цвета смыкающихся концов
  40.     bestStart = 0;
  41.     bestFinish = 0;
  42. }
  43.  
  44.  
  45. // чтоб посчитать, сколько вершин можно зохавать
  46. int f(int x, int d0, int d1) {
  47.     return (x % 2 == 0) ? x-d0 : x-d1;
  48. }
Add Comment
Please, Sign In to add comment