fork download
  1. /*
  2. * Author: Geeza
  3. */
  4.  
  5. #include <bits/stdc++.h>
  6.  
  7. #define ld long double
  8. #define ll long long
  9. #define pb push_back
  10. #define fin(a, n) for(int i = a; i < n; i++)
  11. #define fjn(a, n) for(int j = a; j < n; j++)
  12. #define all(a) a.begin(),a.end()
  13. #define allr(a) a.rbegin(),a.rend()
  14. #define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
  15.  
  16. using namespace std;
  17.  
  18. const double PI = acos(-1);
  19. const int N = 1e5+5;
  20. const ll oo = 0x3f3f3f3f3f3f3f3f;
  21. const int mod = 1000000007, inf = 1e6;
  22.  
  23. string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
  24. int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
  25. int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
  26. char dc[] = {'D', 'L', 'R', 'U'};
  27.  
  28. int n, p, k;
  29. ll dp[N][1<<8]; // idx, mask
  30. vector<pair<int, int>> v;
  31. vector<vector<ll>> s;
  32.  
  33. ll calc(int idx, int mask, int rem) {
  34. if (idx == n) return 0;
  35.  
  36. ll &ret = dp[idx][mask];
  37. if (~ret)return ret;
  38. int ch1 = 0, ch2 = 0;
  39. ret = 0;
  40.  
  41. ret = max(ret, calc(idx+1, mask, rem)); // leave
  42. // take
  43. // audience
  44. if (rem > 0) {
  45. ret = max(ret, calc(idx+1, mask, rem-1) + v[idx].first);
  46. }
  47.  
  48. //player
  49. for (int i = 0; i < p; i++) {
  50. if ((mask>>i)&1)continue;
  51. ret = max(ret, calc(idx+1, mask|(1<<i), rem) + s[v[idx].second][i]);
  52. }
  53.  
  54. return ret;
  55. }
  56.  
  57. void solve() {
  58. cin >> n >> p >> k;
  59. v.assign(n, {0, 0});
  60. fin(0, n) cin >> v[i].first, v[i].second = i;
  61. s = vector<vector<ll>>(n, vector<ll>(p, 0));
  62. fin(0, n) {
  63. fjn(0, p) cin >> s[i][j];
  64. }
  65.  
  66. sort(all(v), [&](pair<int, int> &a, pair<int, int> &b) {
  67. return a.first > b.first;
  68. });
  69.  
  70. memset(dp, -1, sizeof dp);
  71. cout << calc(0, 0, k) << "\n";
  72. }
  73.  
  74. int main() {
  75. FAST;
  76. #ifndef ONLINE_JUDGE
  77. freopen("input.txt","r",stdin);
  78. freopen("output.txt","w",stdout);
  79. #endif
  80. int tt = 1; //cin >> tt;
  81. while(tt--){
  82. solve();
  83. }
  84. return 0;
  85. }
Success #stdin #stdout 0.03s 203564KB
stdin
Standard input is empty
stdout
0