Ankit_132

E

Oct 1st, 2023
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll     long long
  6.  
  7. int main()
  8. {
  9.     ll int n, k, p;
  10.     cin>>n>>k>>p;
  11.  
  12.     vector<ll int> c(n);
  13.  
  14.     vector<vector<ll int>> a(n, vector<ll int> (k));
  15.  
  16.     for(int i=0; i<n; i++)
  17.     {
  18.         cin>>c[i];
  19.         for(auto &e: a[i])   cin>>e;
  20.     }
  21.  
  22.     vector<ll int> powp(k);
  23.     powp[0] = 1;
  24.  
  25.     for(int i=1; i<k; i++)      powp[i] = (p+1)*powp[i-1];
  26.  
  27.     ll int tot = 0;
  28.     for(auto e: powp)
  29.         tot += e*p;
  30.  
  31.     vector<ll int> mp(tot+10);
  32.     mp[0] = 1;
  33.     vector<ll int> v(k);
  34.  
  35.     for(int i=0; i<n; i++)
  36.     {
  37.         for(int jj=tot-1; jj>=0; jj--)
  38.         {
  39.             int j = jj;
  40.             if(!mp[j])      continue;
  41.  
  42.             for(int _=k-1; _>=0; _--)
  43.             {
  44.                 v[_] = j/(powp[_]);
  45.                 j %= (powp[_]);
  46.             }
  47.  
  48.             for(auto _=0; _<k; _++)
  49.                 v[_] = min(p, v[_]+a[i][_]);
  50.  
  51.             ll int val = 0;
  52.             for(auto _=0; _<k; _++)
  53.                 val += v[_]*powp[_];
  54.  
  55.             if(!mp[val])        mp[val] = mp[jj]+c[i];
  56.             mp[val] = min(mp[val], mp[jj]+c[i]);
  57.         }
  58.     }
  59.  
  60.     mp[tot] -= 1;
  61.  
  62.     cout<<mp[tot]<<"\n";
  63. }
  64.  
Advertisement
Add Comment
Please, Sign In to add comment