Pagini recente » Cod sursa (job #2604899) | Cod sursa (job #3135674) | Cod sursa (job #810409) | Cod sursa (job #1891865) | Cod sursa (job #2312012)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int maxim(int a,int b){
if(a>b)return a;
return b;
}
int main()
{
ifstream in("rucsac.in");
ofstream out("rucsac.out");
int nr_obiecte;
in>>nr_obiecte;
int greutate_maxima;
in>>greutate_maxima;
vector<int> greutati;
vector<int> profituri;
greutati.push_back(0);
profituri.push_back(0);
for(int i=0;i<nr_obiecte;i++){
int auxgre,auxprof;
in>>auxgre>>auxprof;
greutati.push_back(auxgre);
profituri.push_back(auxprof);
}
vector<int> dinamica(greutate_maxima+1,0);
vector<int>linie_precedenta(dinamica);
for(int i=0;i<=nr_obiecte;i++){
for(int j=0;j<=greutate_maxima;j++){
if(j-greutati[i]>=0){
dinamica[j]=maxim(linie_precedenta[j],linie_precedenta[j-greutati[i]]+profituri[i]);
}
else {
dinamica[j]=linie_precedenta[j];
}
}
linie_precedenta=dinamica;
}
int suma_maxima=dinamica[0];
for(int j=0;j<=greutate_maxima;j++)
if(dinamica[j]>suma_maxima)suma_maxima=dinamica[j];
out<<suma_maxima;
in.close();
out.close();
return 0;
}