Pagini recente » Cod sursa (job #2192312) | Cod sursa (job #930687) | Cod sursa (job #1195573) | Cod sursa (job #3122605) | Cod sursa (job #1107691)
#include<fstream>
#include<vector>
#define NMAX 205
#define GMAX 70005
#define Min min(j/i,v[i])
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
struct obiect
{
int greutate,nr,valmax;
obiect()
{
greutate=valmax=0;
}
}DP[2][GMAX];
int n,g,v[NMAX];
vector<int> sol;
int main()
{
fin>>n>>g;
for(int i=1,x;i<=n;i++)
{
fin>>x;
v[x]++;
}
int l=0;
for(int i=1;i<=200;i++)
{
if(!v[i])
continue;
for(int j=0;j<=g;j++)
{
DP[1-l][j]=DP[l][j];
if(DP[l][j-Min*i].greutate+Min*i>=DP[1-l][j].greutate)
{
DP[1-l][j]=DP[l][j-Min*i];
DP[1-l][j].greutate+=Min*i;
DP[1-l][j].nr+=Min;
DP[1-l][j].valmax=i;
}
}
l=1-l;
}
fout<<DP[l][g].greutate<<' '<<DP[l][g].nr<<'\n';
for(int i=DP[l][g].valmax,val=DP[l][g].greutate;i;i--)
while(i<=val && v[i]--)
{
sol.push_back(i);
val-=i;
}
for(int i=sol.size()-1;i>=0;i--)
fout<<sol[i]<<'\n';
return 0;
}