Cod sursa(job #2417839)

Utilizator Carol_LucaCarol Luca Carol_Luca Data 1 mai 2019 20:02:20
Problema Ghiozdan Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
#define infile ("ghiozdan.in");
#define outfile ("ghiozdan.out");
#define lim_n 20003
#define lim_g 75003
#define oo INT_MAX
using namespace std;
int n,g,gmax,minn,ind;
int w[lim_n];
bool dp[lim_g];
int nr[lim_g],nrne[lim_g];
int main()
{
    ifstream in infile
    ofstream out outfile
    ios_base::sync_with_stdio(false);
    in.tie(0),out.tie(0);
    in>>n>>g;
    for(int i=1;i<=n;++i)
        in>>w[i];
    for(int i=1;i<=lim_g;++i)
        nr[i]=oo,nrne[i]=oo;
    dp[0]=true;
    nr[0]=0;
    for(int i=n;i>=1;--i)
    for(int j=g-w[i];j>=0;--j)
    if(dp[j])
    dp[j+w[i]]=true,nrne[j+w[i]]=nrne[j]+1,nr[j+w[i]]=min(nr[j+w[i]],nr[j]+1);
    gmax=g;
    while(dp[gmax]==false)
        --gmax;
    out<<gmax<<" "<<nr[gmax]<<endl;
    int nmin=nr[gmax];
    for(int i=n;i>=1;--i)
    if(nrne[gmax-w[i]]==nmin-1)
    {
        gmax-=w[i];
        nmin--;
        out<<w[i]<<endl;
        if(nmin==1)
        {
            out<<gmax;
            return 0;
        }

        if(gmax==0) return 0;
    }
    return 0;
}