Pagini recente » Cod sursa (job #1077450) | Cod sursa (job #1557213) | Cod sursa (job #2511222) | Cod sursa (job #1868782) | Cod sursa (job #656338)
Cod sursa(job #656338)
#include <fstream>
#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;
ifstream f("ghiozdan.in");
ofstream g("ghiozdan.out");
void citeste(){
f>>n>>K;
for(int i=1; i<=n; ++i){
int x;
f>>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(){
g<<Gmax<<" "<<--sol[Gmax]<<"\n";
for(int i=Gmax; i; i = i-t[i])
g<<t[i]<<"\n";
}
int main(){
citeste();
rezolva();
scrie();
f.close();
g.close();
return 0;
}