Pagini recente » Cod sursa (job #825388) | Cod sursa (job #656342)
Cod sursa(job #656342)
#include <cstdio>
#define nmax 20001
#define wmax 202
#define gmax 75001
using namespace std;
int w[wmax];
int sol[gmax];
int t[gmax];
int n, K;
int Gmax;
int mx;
void citeste(){
scanf("%d%d", &n, &K);
for(int i=1; i<=n; ++i){
int x;
scanf("%d", &x);
++w[x];
if (mx < x) mx = x;
}
}
void rezolva(){
sol[0] = 1;
//t[0] = 0;
for(int i=mx; i>=1; --i)
if (w[i])
for(int j=K-i; j>=0; --j){
if (sol[j])
for(int k=1; k<=w[i]; ++k)
if (j+i*k <= K && sol[j+i*k]==0){
sol[j+i*k] = sol[j] + k;
t[j+i*k] = i ;
if (Gmax < j+i*k) Gmax = j+i*k;
}
}
//while (!sol[Gmax]) --Gmax;
}
void scrie(){
printf("%d %d\n", Gmax, --sol[Gmax]);
for(int i=Gmax; i; i = i-t[i])
printf("%d\n", t[i]);
}
int main(int argc, char** argv){
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
citeste();
rezolva();
scrie();
return 0;
}