Pagini recente » Cod sursa (job #2962155) | Cod sursa (job #2568592) | Cod sursa (job #1927028) | Cod sursa (job #1677489) | Cod sursa (job #2422358)
#include <fstream>
#define INF 2000000000
#define DIM 210
#define DIMG 80000
using namespace std;
ifstream fin ("ghiozdan.in");
ofstream fout ("ghiozdan.out");
int f[DIM],d[DIMG],ant[DIMG];
int g,n,i,j,t,maxi,x;
int main (){
fin>>n>>g;
for (i=1;i<=n;i++){
fin>>x;
f[x]++;
}
/// d[i][j] - nr min de obiecte pt a obtine greutatea j folosind\
doar obicte cu greutatea <= i
for (j=0;j<=g;j++)
d[j] = INF;
d[0] = 0;
for (i=200;i;i--){
if (!f[i]) /// nu are sens sa il mai iau in calcul daca nu apare
continue;
for (j=g;j>=0;j--){
if (d[j] != INF){
for (t=1;t<=f[i];t++){
if (j+i*t > g)
break;
if (d[j+i*t] != INF)
continue;
maxi = max (maxi,j+i*t);
d[j+i*t] = d[j]+t;
ant[j+i*t] = i;
}}}}
fout<<maxi<<" "<<d[maxi]<<"\n";
x = maxi;
while (x){
fout<<ant[x]<<"\n";
x -= ant[x];
}
return 0;
}