Pagini recente » Cod sursa (job #2620516) | Cod sursa (job #1631241) | Cod sursa (job #2345865) | Cod sursa (job #2049323) | Cod sursa (job #297902)
Cod sursa(job #297902)
#include <cstdio>
using namespace std;
#define Nmax 20011
#define Lmax 200
#define Inf 0x3f3f3f3f
int v[Nmax],n,gmax,suma,g,nr,s[4*Nmax],sol[4*Nmax];
inline int max(int a, int b)
{
return a>b?a:b;
}
inline int min(int a, int b)
{
return a<b?a:b;
}
void read_data()
{
int i;
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d %d", &n,&g);
for (i=1;i<=n;++i)
{
scanf("%d", &v[i]);
}
}
void solve()
{
int i,j,lmax=0,ok;
for (i=1;i<=g;++i)
s[i]=100;
for (i=1;i<=n && s[g]==100;++i)
{
lmax+=v[i];
lmax=max(lmax,g);
for (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];
}
}
ok=0;
i=g;
while(!ok)
{
if (s[i]==Inf) --i;
else
ok=1;
}
printf("%d %d\n", i-1,s[i-1]);
g=i-1;
while(g)
{
printf("%d\n", sol[g]);
g-=sol[g];
}
}
int main()
{
read_data();
solve();
//write_data();
return 0;
}