Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long tint;
- #define forsn(i, s, n) for(int i=s;i<int(n);i++)
- #define forn(i, n) forsn(i, 0, n)
- #define all(v) v.begin(),v.end()
- #define rall(v) v.rbegin(), v.rend()
- #define NACHO ios::sync_with_stdio(0); cin.tie(NULL);
- const int INF = 1111122222;
- const int MOD = 1e9+7;
- struct info{
- int id, buy, tot;
- };
- int dp[21][1205][1205];
- int S[21][1205];
- int tam[21];
- info vengo[21][1205][1205];
- int main(){
- NACHO;
- ifstream cin("zapallos.in");
- ofstream cout("zapallos.out");
- int n, w; cin >> n >> w;
- forn(i, n){
- int k; cin >> k;
- tam[i] = k;
- vector<int> p (k);
- forn(j, k){
- cin >> p[j];
- p[j] = 10-p[j];
- }
- forsn(j, 1, k+1){
- S[i][j] = S[i][j-1]+p[j-1];
- }
- }
- forn(i, n){
- forn(j, w+1){
- forn(k, w+1){
- dp[i][j][k] = -100;
- }
- }
- }
- forn(i, min(w, tam[0])+1){
- dp[0][i][i] = S[0][i];
- }
- forn(i, n){
- forn(j, w+1){
- forn(k, w+1){
- vengo[i][j][k] = {-1,-1,-1};
- }
- }
- }
- forsn(i, 1, n){
- forn(j, min(w, tam[i])+1){
- forn(k, min(w, tam[i-1])+1){
- forn(l, w+1){
- if(j+k+l <= w){
- if(dp[i-1][k][k+l]+S[i][j] > dp[i][j][k+j+l]){
- dp[i][j][j+k+l] = S[i][j]+dp[i-1][k][k+l];
- vengo[i][j][j+k+l] = {i-1, k, k+l};
- }
- }
- }
- }
- }
- }
- int best = -1, cant = 0, comproUlt = 0;
- forn(i, min(tam[n-1], w)+1){
- forn(j, w+1){
- if(dp[n-1][i][j] > best){
- best = dp[n-1][i][j];
- cant = j;
- comproUlt = i;
- }
- }
- }
- cout << best << " " << cant << "\n";
- vector<int> ret;
- ret.push_back(comproUlt);
- int st = n-1;
- while(st != -1){
- auto s = vengo[st][comproUlt][cant];
- if(s.buy == -1) break;
- ret.push_back(s.buy);
- st = st-1;
- comproUlt = s.buy;
- cant = s.tot;
- }
- assert(ret.size() > 0);
- for(int i=int(ret.size())-1;i>=0;i--){
- cout << ret[i] << " ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement