Pagini recente » Cod sursa (job #1862025) | Cod sursa (job #584235) | Cod sursa (job #2372318) | Profil banica.george | Cod sursa (job #708403)
Cod sursa(job #708403)
#include<fstream>
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int n,g1,i,j,maxi,a[5001],b[5001],v[10001];
int poz(int li,int ls)
{int i,j,x,y;
i=li;
j=ls;
x=a[i];
y=b[i];
while(i<j)
{while(i<j&&b[j]<=y)
--j;
a[i]=a[j];
b[i]=b[j];
while(i<j&&b[i]>=y)
++i;
a[j]=a[i];
b[j]=b[i];
}
a[i]=x;
b[i]=y;
return i;
}
void quick(int li,int ls)
{int k;
if(li<ls)
{k=poz(li,ls);
if(li<k-1)
quick(li,k-1);
if(k+1<ls)
quick(k+1,ls);
}}
int main()
{f>>n>>g1;
for(i=1;i<=n;++i)
f>>a[i]>>b[i];
quick(1,n);
maxi=0;
for(i=1;i<=n;++i)
{for(j=maxi;j>=1;--j)
if(v[j]!=0)
if(v[j+a[i]]<v[j]+b[i]&&j+a[i]<=g1)
{v[j+a[i]]=v[j]+b[i];
if(j+a[i]>maxi)
maxi=j+a[i];
}
if(v[a[i]]<b[i])
v[a[i]]=b[i];
if(a[i]>maxi)
maxi=a[i];
}
g<<v[g1]<<'\n';
f.close();
g.close();
return 0;
}