Advertisement
LEGEND2004

DP

Aug 30th, 2024
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.11 KB | None | 0 0
  1. #pragma GCC optimize("O3")
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. #define int long long
  6. #define endl '\n'
  7. #define fastio ios_base::sync_with_stdio(0); cin.tie(0)
  8. const int mod = 1e9 + 7; // 998244353
  9. /*
  10. int f[25];
  11. int memo[50];
  12.  
  13. int fibo(int n){
  14.     if(n <= 1) // 0 1
  15.         return 1;
  16.     if(memo[n] != 0)
  17.         return memo[n];
  18.     return memo[n] = fibo(n - 1) + fibo(n - 2);
  19. }
  20. */
  21. /*
  22. const int N = 1e5 + 5;
  23. int dp[N];
  24. */
  25.  
  26. int dp[1005][1005];
  27.  
  28. signed main()
  29. {
  30.     fastio;
  31.     // fibo: 1 1 2 3 5 8 13 21 34 55 ...
  32. /*
  33. // A
  34.     int n;
  35.     cin >> n;
  36.  
  37.  
  38.     f[0] = 1;
  39.     for(int i = 1; i <= n; i++)
  40.         f[i] = f[i - 1] * i;
  41.     */
  42.     /*
  43.     // B
  44.     int n;
  45.     cin >> n;
  46.     f[0] = 1; // 2 in C
  47.     f[1] = 1;
  48.     for(int i = 2; i <= n; i++){
  49.         f[i] = f[i - 1] + f[i - 2];
  50.     }
  51.  
  52.     cout << f[n];
  53.     */
  54.  
  55.  
  56.     // dp[i] --> 1 to i number of ways
  57.     /*
  58.     //D
  59.     int n , k;
  60.     cin >> n >> k;
  61.     dp[1] = 1;
  62.     for(int i = 2; i <= n; i++){
  63.         for(int j = 1; j <= k; j++){
  64.             if(i <= j)  break;
  65.             dp[i] += dp[i - j];
  66.         }
  67.     }
  68.     cout << dp[n];
  69.     */
  70.  
  71.     /*
  72.     3
  73.     1 -1 1
  74.     2
  75.  
  76.     0 1 -1 1 0
  77.     */
  78.     /*
  79.     // E
  80.     // dp[i] --> 0 to i max sum
  81.  
  82.  
  83.     int n , k;
  84.     cin >> n;
  85.     int a[n + 5];
  86.     a[n + 1] = 0;
  87.     for(int i = 1; i <= n; i++){
  88.         cin >> a[i];
  89.     }
  90.     cin >> k;
  91.  
  92.     dp[0] = 0;
  93.     for(int i = 1; i <= n + 1; i++){
  94.         dp[i] = LLONG_MIN;
  95.         for(int j = 1; j <= k; j++){
  96.             if(i < j)   break;
  97.             dp[i] = max(dp[i] , dp[i - j] + a[i]);
  98.         }
  99.     }
  100.     cout << dp[n + 1];
  101.     */
  102.     /*
  103.     // F
  104.     // dp[i] --> 1 to i min cost (sum of abs difference)
  105.     int n;
  106.     cin >> n;
  107.     int a[n + 5];
  108.     for(int i = 1; i <= n; i++){
  109.         cin >> a[i];
  110.     }
  111.     dp[1] = 0;
  112.     dp[2] = abs(a[2] - a[1]);
  113.     for(int i = 3; i <= n; i++){
  114.         // from i - 1 or i - 2
  115.         dp[i] = LLONG_MAX;
  116.         dp[i] = min({dp[i] , dp[i - 1] + abs(a[i] - a[i - 1]) , dp[i - 2] + abs(a[i] - a[i - 2])});
  117.     }
  118.     cout << dp[n];
  119.     */
  120.     /*
  121.     // G
  122.     int n , k;
  123.     cin >> n >> k;
  124.     int a[n + 5];
  125.     for(int i = 1; i <= n; i++){
  126.         cin >> a[i];
  127.     }
  128.  
  129.     dp[1] = 0;
  130.     for(int i = 2; i <= n; i++){
  131.         dp[i] = LLONG_MAX;
  132.         for(int j = 1; j <= k; j++){
  133.             if(i - j < 1)   continue;
  134.             dp[i] = min(dp[i] , dp[i - j] + abs(a[i] - a[i - j]));
  135.         }
  136.     }
  137.     cout << dp[n];
  138.     */
  139.     /*
  140.     1 1 1 1
  141.     1 2 3 4
  142.     1 3 6 10
  143.     1 4 10 20
  144.     */
  145.     /*
  146.     // H
  147.     int n , m;
  148.     cin >> n >> m;
  149.     for(int i = 1; i <= n; i++){
  150.         for(int j = 1; j <= m; j++){
  151.             if(i == 1 && j == 1) // Starting Point
  152.                 dp[i][j] = 1;
  153.             else
  154.                 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
  155.         }
  156.     }
  157.     cout << dp[n][m];
  158.     */
  159.     /*
  160.     // I
  161.     int n;
  162.     cin >> n;
  163.     char a[n + 5][n + 5];
  164.     for(int i = 1; i <= n; i++){
  165.         for(int j = 1; j <= n; j++){
  166.             cin >> a[i][j];
  167.         }
  168.     }
  169.  
  170.  
  171.     for(int i = 1; i <= n; i++){
  172.         for(int j = 1; j <= n; j++){
  173.             if(a[i][j] == '*'){
  174.                 dp[i][j] = 0; // gede bilmiremki
  175.                 continue;
  176.             }
  177.             if(i == 1 && j == 1)
  178.                 dp[i][j] = 1;
  179.             else
  180.                 dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % mod;
  181.         }
  182.     }
  183.     cout << dp[n][n];
  184.     */
  185.     /*
  186.     // J
  187.     int n , m;
  188.     cin >> n >> m;
  189.     int a[n + 5][m + 5];
  190.     for(int i = 1; i <= n; i++){
  191.         for(int j = 1; j <= m; j++){
  192.             cin >> a[i][j];
  193.         }
  194.     }
  195.  
  196.     for(int i = 1; i <= n; i++){
  197.         for(int j = 1; j <= m; j++){
  198.             if(i == 1 && j == 1){
  199.                 dp[i][j] = a[i][j];
  200.                 continue;
  201.             }
  202.             dp[i][j] = LLONG_MAX;
  203.             if(i > 1)
  204.                 dp[i][j] = min(dp[i][j] , dp[i - 1][j] + a[i][j]);
  205.             if(j > 1)
  206.                 dp[i][j] = min(dp[i][j] , dp[i][j - 1] + a[i][j]);
  207.         }
  208.     }
  209.     cout << dp[n][m];
  210.     */
  211. }
  212.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement