Dang_Quan_10_Tin

WSEQ2

Aug 12th, 2020
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <algorithm>
  5. #define task ""
  6. using namespace std;
  7. using ll = int;
  8. using ld = long double;
  9.  
  10. const int N = 4e2 + 2;
  11. const ll Inf = 1e18;
  12. int n, m, k;
  13. ll a[N];
  14. ll dp[N][N][N];
  15.  
  16. void Read(){
  17.     cin >> n >> m >> k;
  18.     for(int i = 1; i <= n; ++i)
  19.         cin >> a[i];
  20. }
  21.  
  22. /// f(i, j, u) : số thứ i đã chọn j thằng và u thằng quan trọng
  23. /// TH1 : K chọn i : f(i, j, u) = f(i - 1, j, u) + ((i - j) % k == 0 ? 0 : a[i]);
  24. /// TH2 : Chọn i :
  25. ///         a - Không chọn i vào u : f(i, j, u) = f(i - 1, j - 1, u)
  26. ///         b - Chọn i vào u : f(i, j, u) = f(i - 1, j - 1, u - 1) + a[i]
  27.  
  28. ll &f(int x, int y, int z){
  29.     return dp[x][y][z];
  30. }
  31.  
  32. void Solve(){
  33.     fill_n(&dp[0][0][0], N * N * N, Inf);
  34.     dp[0][0][0] = 0;
  35.     for(int i = 1; i <= n; ++i)
  36.         for(int j = 0; j <= m; ++j)
  37.             for(int u = 0; u <= j; ++u){
  38.                 ///TH1
  39.                 f(i, j, u) = f(i - 1, j, u) + ((i - j) % k == 0 ? 0 : a[i]);
  40.                 ///TH2
  41.                 if(j){
  42.                     //a
  43.                     f(i, j, u) = min(f(i, j, u), f(i - 1, j - 1, u));
  44.                     //b
  45.                     if(u)
  46.                         f(i, j, u) = min(f(i, j, u), f(i - 1, j - 1, u - 1) + a[i]);
  47.                 }
  48.             }
  49.     ll ans = Inf;
  50.     for(int i = 0; i <= m; ++i)
  51.         ans = min(ans, dp[n][i][i - (n / k - (n - i) / k)]);
  52.     cout << ans;
  53. }
  54.  
  55. int32_t main(){
  56.     ios::sync_with_stdio(0);
  57.     cin.tie(0);
  58.     cout.tie(0); if(fopen(task".INP", "r"))
  59.     freopen(task".INP", "r", stdin),
  60.     freopen(task".OUT", "w", stdout);
  61.     Read();
  62.     Solve();
  63. }
  64.  
Add Comment
Please, Sign In to add comment