Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- int main()
- {
- ll int n, k, p;
- cin>>n>>k>>p;
- vector<ll int> c(n);
- vector<vector<ll int>> a(n, vector<ll int> (k));
- for(int i=0; i<n; i++)
- {
- cin>>c[i];
- for(auto &e: a[i]) cin>>e;
- }
- vector<ll int> powp(k);
- powp[0] = 1;
- for(int i=1; i<k; i++) powp[i] = (p+1)*powp[i-1];
- ll int tot = 0;
- for(auto e: powp)
- tot += e*p;
- vector<ll int> mp(tot+10);
- mp[0] = 1;
- vector<ll int> v(k);
- for(int i=0; i<n; i++)
- {
- for(int jj=tot-1; jj>=0; jj--)
- {
- int j = jj;
- if(!mp[j]) continue;
- for(int _=k-1; _>=0; _--)
- {
- v[_] = j/(powp[_]);
- j %= (powp[_]);
- }
- for(auto _=0; _<k; _++)
- v[_] = min(p, v[_]+a[i][_]);
- ll int val = 0;
- for(auto _=0; _<k; _++)
- val += v[_]*powp[_];
- if(!mp[val]) mp[val] = mp[jj]+c[i];
- mp[val] = min(mp[val], mp[jj]+c[i]);
- }
- }
- mp[tot] -= 1;
- cout<<mp[tot]<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment