Pagini recente » Cod sursa (job #859246) | Cod sursa (job #2413629) | Cod sursa (job #1396014) | Cod sursa (job #2570405) | Cod sursa (job #1704815)
#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;
}