Cod sursa(job #1891066)

Utilizator 3DwArDPauliuc Edward 3DwArD Data 23 februarie 2017 18:38:17
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
#define Nmax 20002
#define Gmax 75002
using namespace std;
ifstream f("ghiozdan.in");
ofstream g("ghiozdan.out");
int n,gmax;
int m1[Gmax],m2[Gmax],v[Nmax];
bool used[Nmax][Gmax];
int main()
{
    f>>n>>gmax;
    for(int i=1;i<=n;i++){
        f>>v[i];
        for(int j=0;j<=gmax;j++){
            if(j<v[i])
            m2[j]=m1[j];
            else
            {
                if(m1[j-v[i]]+v[i]>=m1[j]){
                    used[i][j]=1;
                    m2[j]=m1[j-v[i]]+v[i];
                }else{
                    m2[j]=m1[j];
                }
            }}
            for(int i=1;i<=gmax;i++){
                m1[i]=m2[i];
                m2[i]=0;
            }
    }

    int i=n,j=gmax;
    while(!used[i][j])i--;
    vector <int> q;
    while(i>0&&j>0&&used[i][j]==1){
        q.push_back(v[i]);
        j=j-v[i];
        i--;
    }
    g<<m1[gmax]<<" "<<q.size()<<"\n";
    for(int i=0;i<q.size();i++)g<<q[i]<<"\n";
    return 0;
}