Advertisement
Josif_tepe

Untitled

Apr 6th, 2023
555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <cstring>
  4. #include <vector>
  5. using ll=long long;
  6.  
  7. using namespace std;
  8.  
  9. int n,m,k;
  10. int cost[25];
  11. int cw[25][25];
  12. int vw[25][25];
  13. int dp[1006][22][3];
  14. int rec(int money_left, int at, bool locked) {
  15.     if(at == -1 or money_left == 0) {
  16.         return 0;
  17.     }
  18.     if(dp[money_left][at][locked] != -1) {
  19.         return dp[money_left][at][locked];
  20.     }
  21.     int result = 0;
  22.     result = max(result, rec(money_left, at - 1, true));
  23.    
  24.     if(locked) {
  25.         int spend = money_left - cost[at];
  26.         if(spend >= 0) {
  27.             for(int j = 0; j < m; j++) {
  28.                 int tmp_spend = spend - cw[at][j];
  29.                 if(tmp_spend >= 0) {
  30.                     result = max(result, rec(tmp_spend, at, false) + vw[at][j]);
  31.                    
  32.                     result = max(result, rec(tmp_spend, at - 1, true) + vw[at][j]);
  33.                 }
  34.             }
  35.         }
  36.     }
  37.     else {
  38.         for(int j = 0; j < m; j++) {
  39.             int spend = money_left - cw[at][j];
  40.             if(spend >= 0) {
  41.                 result = max(result, rec(spend, at, locked) + vw[at][j]);
  42.                 result = max(result, rec(spend, at - 1, true) + vw[at][j]);
  43.             }
  44.         }
  45.     }
  46.     return dp[money_left][at][locked] = result;
  47. }
  48.  
  49. int main()
  50. {
  51.     int t;
  52.     cin>>t;
  53.     while(t--)
  54.     {
  55.         memset(dp,-1,sizeof dp);
  56.         cin>>n>>m>>k;
  57.         for(int i=0;i<n;i++){
  58.             cin>>cost[i];
  59.        
  60.         }
  61.         for(int i=0;i<n;i++)
  62.         {
  63.             for(int j=0;j<m;j++)
  64.             {
  65.                 cin >> cw[i][j];
  66.             }
  67.            
  68.         }
  69.         for(int i = 0; i < n; i++) {
  70.             for(int j =0 ; j < m; j++) {
  71.                 cin >> vw[i][j];
  72.             }
  73.         }
  74.         cout<<rec(k, n- 1,true)<<endl;
  75.     }
  76.     return 0;
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement