Cod sursa(job #2929424)

Utilizator lucaxsofLuca Sofronie lucaxsof Data 25 octombrie 2022 20:52:11
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#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();
}