Pagini recente » Cod sursa (job #562051) | Cod sursa (job #467482) | Cod sursa (job #898497) | Cod sursa (job #1890593) | Cod sursa (job #657179)
Cod sursa(job #657179)
#include <cstdio>
#include <algorithm>
#define GMax 75005
#define WMax 205
using namespace std;
int N[WMax], DP[2][GMax], MaxW, MaxG, GS, NS;
void Read ()
{
freopen ("ghiozdan.in", "r", stdin);
int n;
scanf ("%d %d", &n, &MaxG);
for (; n>0; --n)
{
int CurrentW;
scanf ("%d", &CurrentW);
++N[CurrentW];
MaxW=max (MaxW, CurrentW);
}
}
void Print ()
{
freopen ("ghiozdan.out", "w", stdout);
printf ("%d %d\n", GS, NS);
}
void Initialize ()
{
for (int G=1; G<=MaxG; ++G)
{
DP[0][G]=GMax;
}
}
void Solve ()
{
Initialize ();
int L=1;
for (int W=1; W<=MaxW; ++W, L^=1)
{
DP[L][0]=0;
for (int G=1; G<=MaxG; ++G)
{
DP[L][G]=GMax;
for (int K=0; K<=N[W] and K*W<=G; ++K)
{
DP[L][G]=min (DP[L][G], DP[L^1][G-K*W]+K);
if (DP[L^1][G-K*W]+K<DP[L][G])
{
}
}
}
}
for (int G=MaxG; G>=0; --G)
{
if (DP[L^1][G]<GMax)
{
GS=G, NS=DP[L^1][G];
return;
}
}
}
int main()
{
Read ();
Solve ();
Print ();
return 0;
}