Pagini recente » Cod sursa (job #2370372) | Cod sursa (job #1963727) | Cod sursa (job #2952984) | Cod sursa (job #1687136) | Cod sursa (job #2005704)
#include <fstream>
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
int max(int a,int b)
{
return a > b ? a : b;
}
int N,G;
vector<pair<int,int> > vec;
void DP()
{
int mat[N][G];
for(int i = 0; i < N ;i++)
{
for(int j = 0; j < G;j++)
{
mat[i][j] = 0;
}
}
for(int i = 0; i < N ;i++)
{
for(int j = 0; j < G;j++)
{
if(j == 0)
continue;
else if( i == 0)
{
mat[0][j] = vec[0].second;
}
else if(vec[i].first > j)
{
mat[i][j] = mat[i-1][j];
}
else
{
mat[i][j] = max(mat[i-1][j-vec[i-1].first]+ vec[i-1].second,mat[i-1][j]);
}
}
}
out<<mat[N-1][G-1];
}
struct Comp{
bool operator()(pair<int,int> j,pair<int,int> i)
{
return j.first <= i.first;
}
};
int main()
{
in >> N >> G;
int gr,val;
pair<int,int> aux;
for(int i = 0; i < N; i++)
{
in >> gr >> val;
aux.first = gr; aux.second = val;
vec.push_back(aux);
}
// sort(vec.begin(),vec.end(),Comp());
// for(auto it :vec)
// cout<<it.first<<' '<<it.second<<'\n';
DP();
return 0;
}