Pagini recente » Cod sursa (job #2594779) | Cod sursa (job #1686674) | Cod sursa (job #1118982) | Cod sursa (job #166884) | Cod sursa (job #2359744)
#include <bits/stdc++.h>
#define maxn 20000
#define maxg 75000
#define pii pair<int,int>
#define fi first
#define se second
#define inf INT_MAX/2-1
using namespace std;
int v[maxn+5];
pii dp[maxg+5]; /// dp[i].fi -- nr de obiecte din rucsac dp[i].se -- ind ult ob adaugat
int main ()
{
ifstream fin ( "ghiozdan.in" );
ofstream fout ( "ghiozdan.out" );
int n, g; fin >> n >> g;
int i, j, mx = 0;
for ( i = 1; i <= n; i++ ) fin >> v[i];
for ( i = 1; i <= g; i++ ) dp[i] = {inf,0};
dp[0] = {0,1};
for ( i = 1; i <= n; i++ )
for ( j = g; j >= v[i]; j-- )
if ( dp[j-v[i]].se > 0 && (dp[j].fi == inf || (dp[j].fi > dp[j-v[i]].fi + 1 && mx <= j)) )
dp[j] = {dp[j-v[i]].fi+1,i}, mx = max ( mx, j );
j = g;
while ( j > 0 && dp[j].se == 0 ) j--;
fout << j << ' ' << dp[j].fi << '\n';
while ( j > 0 )
{
fout << v[dp[j].se] << '\n';
j -= v[dp[j].se];
}
fin.close ();
fout.close ();
return 0;
}