Pagini recente » Cod sursa (job #1564140) | Cod sursa (job #814473) | Cod sursa (job #2769390) | Cod sursa (job #1304233) | Cod sursa (job #1843100)
#include <cstdio>
#define nmax 5000
#define max(a, b) (((a) > (b))?(a):(b))
using namespace std;
FILE *fin, *fout;
struct Obiect
{
int greutate;
int pret;
};
int linie;
int numarObiecte, greutateMaxima;
Obiect obiecte[nmax];
int dinamic[2][nmax];
void dinamica()
{
for( int i = 0; i < numarObiecte; i++, linie = 1 - linie)
for(int greutateCurenta = 0; greutateCurenta <= greutateMaxima; greutateCurenta++)
{
dinamic[1-linie][greutateCurenta] = dinamic[linie][greutateCurenta];
if(obiecte[i].greutate <= greutateCurenta)
dinamic[1-linie][greutateCurenta] = max(dinamic[1-linie][greutateCurenta],
dinamic[linie][greutateCurenta - obiecte[i].greutate] + obiecte[i].pret);
}
}
int main()
{
fin = fopen("rucsac.in", "r");
fout = fopen("rucsac.out", "w");
fscanf(fin, "%d %d", &numarObiecte, &greutateMaxima);
for(int i = 0; i < numarObiecte; i++)
fscanf(fin, "%d %d", &obiecte[i].greutate, &obiecte[i].pret);
dinamica();
fprintf(fout, "%d", dinamic[linie][greutateMaxima]);
return 0;
}