Pagini recente » Autentificare | Cod sursa (job #403902) | Cod sursa (job #1704720) | Cod sursa (job #1689247) | Cod sursa (job #1751424)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream in("ghiozdan.in");
ofstream out("ghiozdan.out");
int v[20010];
int D[2][75010][2];
int main()
{
int N, G;
in >> N >> G;
for (int i = 1;i <= N;++i)
in >> v[i];
for (int i = 1;i <= N;++i)
for (int w = 1;w <= G;++w)
{
if (v[i] > w)
D[i % 2][w][0] = D[(i + 1) % 2][w][0], D[i % 2][w][1]= D[(i + 1) % 2][w][1];
else if (D[(i + 1) % 2][w - v[i]][0] + v[i] <= G)
{
if (D[(i + 1) % 2][w][0] > D[(i + 1) % 2][w - v[i]][0] + v[i])
D[i % 2][w][0] = D[(i + 1) % 2][w][0], D[i % 2][w][1] = D[(i + 1) % 2][w][1];
else if (D[(i + 1) % 2][w][0] < D[(i + 1) % 2][w - v[i]][0] + v[i])
{
D[i % 2][w][0] = D[(i + 1) % 2][w - v[i]][0] + v[i], D[i % 2][w][1] = D[(i + 1) % 2][w - v[i]][1] + 1;
}
else if (D[(i + 1) % 2][w - v[i]][1] + 1 < D[(i + 1) % 2][w][1])
D[i % 2][w][0] = D[(i + 1) % 2][w][0],D[i % 2][w][1] = D[(i + 1) % 2][w - v[i]][1] + 1;
else
D[i % 2][w][0] = D[(i + 1) % 2][w][0],D[i % 2][w][1] = D[(i + 1) % 2][w][1];
}
else
D[i % 2][w][0] = D[(i + 1) % 2][w][0], D[i % 2][w][1] = D[(i + 1) % 2][w][1];
}
out << D[N % 2][G][0]<< " " << D[N % 2][G][1]<<'\n';
return 0;
}