Pagini recente » Cod sursa (job #2206960) | Cod sursa (job #2176507) | Cod sursa (job #2648337) | Cod sursa (job #2140909) | Cod sursa (job #2836397)
#include <iostream>
#include <fstream>
#include <cstring>
#define maxi 50000
#define nmax 50000
using namespace std;
ifstream f;
ofstream G;
long long dp1[maxi+5],dp2[maxi+5],n,g,greutate[nmax+5],profit[nmax+5];
void read()
{
f.open("rucsac.in",ios::in);
f>>n>>g;
for(int i=1;i<=n;i++)
{
f>>greutate[i]>>profit[i];
}
f.close();
return;
}
inline long long maxim(long long a,long long b)
{
return(a>b?a:b);
}
long long dinamica()
{
for(int i=0;i<=g;i++)
{
if(i>=greutate[1])
{
dp1[i]=profit[1];
}
}
for(int stari=2;stari<=n;stari++)
{
for(int i=0;i<=g;i++)
{
dp2[i]=dp1[i];
}
for(int i=0;i<=g;i++)
{
if(i-greutate[stari]>=0)
{
dp2[i]=maxim(dp2[i],dp1[i-greutate[stari]]+profit[stari]);
}
}
for(int i=0;i<=g;i++)
dp1[i]=dp2[i];
memset(dp2,0,sizeof(dp2));
}
return dp2[g];
}
int main()
{
G.open("rucsac.out",ios::out);
read();
G<<dinamica();
G.close();
return 0;
}