Pagini recente » Istoria paginii runda/shiggydiggy123 | Cod sursa (job #95824) | Cod sursa (job #2243065) | Cod sursa (job #1198319) | Cod sursa (job #3133713)
#include <iostream>
#include <vector>
#include <map>
#include <fstream>
std::ifstream fin("rucsac.in");
std::ofstream fout("rucsac.out");
struct obiecte{
int profit,greutate;
};
std::vector<obiecte> rucsac;
int N, G;
std::map<int, obiecte> used;
void bkt(int x, int &Pmax, int P_current, int G_current){
if(x == N || G_current >= G){
if(P_current > Pmax){
Pmax = P_current;
}
} else {
if(used.count(x) > 0);
else
{
used.insert(std::pair<int,obiecte>(x,rucsac[x]));
P_current += rucsac[x].profit;
G_current += rucsac[x].greutate;
for(int i = x; i < N; i++){
bkt(i,Pmax,P_current,G_current);
}
used.erase(x);
}
}
}
int main(){
fin >> N >> G;
obiecte temp;
for(int i = 0; i < N; i++){
fin >> temp.greutate >> temp.profit;
rucsac.push_back(temp);
}
int Pmax = -1;
bkt(0,Pmax,0,0);
fout << Pmax << std::endl;
return 0;
}