Pagini recente » Cod sursa (job #408875) | Cod sursa (job #1523238) | Cod sursa (job #404467) | Cod sursa (job #597950) | Cod sursa (job #338543)
Cod sursa(job #338543)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Gmax 75011
#define Nmax 20101
#define Inf 0x3f3f3f3f
int n,g,v[Nmax],s[Gmax],sol[Gmax];
int maxim(int a, int b)
{
if (a>b) return a;
return b;
}
int cmp(int a, int b)
{
return (a>b);
}
void read_data()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d %d", &n, &g);
for (int i=1;i<=n;++i)
scanf("%d", &v[i]);
sort(v+1,v+n+1,cmp);
for (int i=1;i<=g;++i)
s[i]=Inf;
}
void solve()
{
int lmax=0;
for (int i=1;i<=n && s[g]==Inf;++i)
{
lmax+=v[i];
lmax>g?lmax=g:0;
for (int j=lmax;j>=v[i];--j)
if (s[j]>s[j-v[i]]+1)
{
s[j]=s[j-v[i]]+1;
sol[j]=v[i];
}
}
int k,ok=0;
k=g;
while(!ok)
{
if (s[k]==Inf) --k;
else
ok=1;
}
printf("%d %d\n", k,s[k]);
g=k;
while(g)
{
printf("%d\n", sol[g]);
g-=sol[g];
}
}
int main()
{
read_data();
solve();
return 0;
}