Dang_Quan_10_Tin

FRACTION

Aug 5th, 2020 (edited)
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.68 KB | None | 0 0
  1. var
  2.     a, b: array[1..1000] of int64;
  3.     n, w : integer;
  4.     dp, f : array[1..1000] of integer;
  5.     ans : integer;
  6.  
  7. procedure ReadInput();
  8. var i : integer;
  9. begin
  10.     readln(n, w);
  11.     for i := 1 to n do
  12.     begin
  13.         read(a[i], b[i]);
  14.     end;
  15. end;
  16.  
  17. function max(a, b : integer) : integer;
  18. begin
  19.     if a > b then max := a
  20.     else max := b;
  21. end;
  22.  
  23. procedure Find_LIS();
  24. var i, j : integer;
  25. begin
  26.     for i := 1 to n do
  27.     begin
  28.         dp[i] := 1;
  29.         for j := 1 to i - 1 do
  30.             if a[i] * b[j] > a[j] * b[i] then
  31.                 dp[i] := max(dp[i], dp[j] + 1);
  32.     end;
  33.     for i := n downto 1 do
  34.     begin
  35.         f[i] := 1;
  36.         for j := n downto i + 1 do
  37.             if a[i] * b[j] < a[j] * b[i] then
  38.                 f[i] := max(f[i], f[j] + 1);
  39.     end;
  40. end;
  41.  
  42. procedure Main_idea();
  43. var i, j, tmp, cur1, cur2: integer;
  44. begin
  45.     ans := 0;
  46.     for i := 1 to n do
  47.     begin
  48.         ans := max(ans, dp[i]);
  49.         if w <> 0 then
  50.         begin
  51.             tmp := a[i];
  52.             a[i] := b[i];
  53.             b[i] := tmp;
  54.             cur1 := 0;
  55.             cur2 := 0;
  56.             for j := 1 to i - 1 do
  57.                 if a[i] * b[j] > a[j] * b[i] then
  58.                     cur1 := max(cur1, dp[j]);
  59.             for j := i + 1 to n do
  60.                 if a[i] * b[j] < a[j] * b[i] then
  61.                     cur2 := max(cur2, f[j]);
  62.             ans := max(ans, cur1 + cur2 + 1);
  63.             tmp := a[i];
  64.             a[i] := b[i];
  65.             b[i] := tmp
  66.  
  67.         end;
  68.     end;
  69. end;
  70.  
  71. procedure Print();
  72. begin
  73.     write(ans);
  74.     readln;
  75. end;
  76.  
  77. BEGIN
  78.     ReadInput();
  79.     Find_LIS();
  80.     Main_idea();
  81.     Print();
  82. END.
  83.  
  84.  
  85.  
Advertisement
Add Comment
Please, Sign In to add comment