Pagini recente » Cod sursa (job #1124519) | Cod sursa (job #2737767) | Cod sursa (job #1111635) | Cod sursa (job #862030) | Cod sursa (job #1818541)
#include <iostream>
#include <fstream>
#define nmax 10001
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
int n,G;
int P;
int c[nmax][nmax];
struct obiect
{
int g;
int p;
};
obiect a[nmax];
void Citire()
{
fin>>n>>G;
int i;
for(i=1;i<=n;i++)
fin>>a[i].g>>a[i].p;
}
void Dinamica()
{
int i,j;
for(i=0;i<=G;i++)
c[0][i]=0;
for(j=1;j<=n;j++)
c[j][0]=0;
for(i=1;i<=n;i++)
for(j=1;j<=G;j++)
if(a[i].g>j) c[i][j]=c[i-1][j];
else c[i][j]=max(c[i-1][j],a[i].p+c[i-1][j-a[i].g]);
}
void Solutie()
{
int x,y;
x=n;
y=G;
while(c[x][y]!=0)
if(c[x][y]!=c[x-1][y]) {P=P+a[x].p;
y=y-a[x].g;
x--;}
else x--;
fout<<P;
}
int main()
{ Citire();
Dinamica();
Solutie();
return 0;
}