Pagini recente » Cod sursa (job #558456) | Cod sursa (job #558591) | Cod sursa (job #197475) | Borderou de evaluare (job #2078314) | Cod sursa (job #609704)
Cod sursa(job #609704)
#include<cstdio>
#include<utility>
#define PER pair<int,int>
#define W first
#define P second
using namespace std;
PER A[10001],B[10001],c[10001],*a,*b,*aux;
int n,w,p,wmax,i,j,ia,ib,ic,LA,LB,LC,sol;
int main()
{
freopen("rucsac.in","r",stdin);
freopen("rucsac.out","w",stdout);
a=A;b=B;
scanf("%d%d",&n,&wmax);
for(;n;n--)
{
scanf("%d%d",&w,&p);LC=0;
for(i=0;i<=LA;i++)
{
if(w+a[i].W>wmax)break;
LC++;
c[LC]=make_pair(w+a[i].W,p+a[i].P);
}
LB=0;
for(ia=1,ic=1;ia<=LA&&ic<=LC;)
{
if(a[ia].W<c[ic].W){b[++LB]=a[ia++];continue;}
if(a[ia].W>c[ic].W){b[++LB]=c[ic++];continue;}
if(a[ia].P>c[ic].P){b[++LB]=a[ia++];ic++;continue;}
b[++LB]=c[ic++];ia++;
}
for(;ia<=LA;)b[++LB]=a[ia++];
for(;ic<=LC;)b[++LB]=c[ic++];
aux=a;a=b;b=aux;LA=LB;
}
for(i=1;i<=LA;i++)sol=sol>a[i].P?sol:a[i].P;
printf("%d\n",sol);
return 0;
}