Pagini recente » Cod sursa (job #1559094) | Cod sursa (job #614317) | Cod sursa (job #2418614) | Cod sursa (job #2922233) | Cod sursa (job #2417839)
#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;
}