Pagini recente » Cod sursa (job #2764315) | Cod sursa (job #2844146) | Cod sursa (job #1402618) | Cod sursa (job #2197348) | Cod sursa (job #2929424)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
#define maxx 10000+2
int obiects, weight;
int dp[3][maxx];
struct oop
{
int p, w;
}Q[maxx];
bool comp(oop a, oop b)
{
if (a.w != b.w) return a.w < b.w;
if (a.p != b.p) return a.p < b.p;
}
void read()
{
fin>> obiects >> weight;
for (int i = 1; i <= obiects; ++i)
fin >> Q[i].w >> Q[i].p;
sort(Q + 1, Q + obiects + 1, comp);
}
//
//trebuie cumva sa renunta la matrixe si sa o transform doar intr-o linie aka vector
void change_lines()
{
for (int j = 1; j <= weight; ++j)
dp[1][j] = dp[2][j];
}
void knapsack()
{
//00000000000000000000000
//
//sorteaza obiectele
for (int i = 1; i <= obiects; ++i)
{
for (int j = 1; j < Q[i].w; ++j)
dp[2][j] = dp[1][j];
for (int j = Q[i].w; j <= weight; ++j)
dp[2][j] = max(dp[1][j], Q[i].p + (dp[1][j - Q[i].w]));
change_lines();
}
1;
}
void print()
{
fout << dp[2][weight];
}
int main()
{
read();
knapsack();
print();
}