Cod sursa(job #1704816)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 19 mai 2016 12:51:46
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.19 kb
#include <bits/stdc++.h>

const int DIM = 1 << 17;
const int INF = 0x3f3f3f3f;
using namespace std;

ifstream input_file ( "ghiozdan.in"  );
ofstream output_file( "ghiozdan.out" );

int n, g, gmax, x;
int dp[DIM], lastg[DIM], cntg[DIM];

void dfs( int value ) {
    if( value == 0 )
        return;

    output_file << lastg[value] << "\n";
    dfs( value - lastg[value] );

    return;
}

int main( void ) {

    input_file >> n >> g;

    for( int i = 1; i <= n; i ++ ) {
        input_file >> x;
        cntg[x] ++;
    }

    memset( dp, INF, sizeof(dp) );
    dp[0] = 0;

    for( int i = 200; i >= 1; i -- ) {
        if( cntg[i] == 0 )
            continue;
    for( int j = g; j >= 0; j -- ) {
        if( dp[j] == INF )
            continue;

        for( int k = 1; k <= cntg[i] && j + i * k <= g; k ++ ) {
            if( dp[j + i * k] == INF ) {
                dp[j + i * k] = dp[j] + k;
                lastg[j + i * k] = i;

                if( gmax < j + i * k )
                    gmax = j + i * k;
            } else
                break;
        }
    }}

    output_file << gmax << " " << dp[gmax] << "\n";
    dfs( gmax );

    return 0;
}