Pagini recente » Cod sursa (job #986801) | Cod sursa (job #1943601) | Cod sursa (job #1634375) | Cod sursa (job #1795691) | Cod sursa (job #56393)
Cod sursa(job #56393)
/* Ivan Nicolae - Bucuresti */
/* Energii */
#include <stdio.h>
#define NMAX 1002
#define GMAX (NMAX*10000)
#define _fin "energii.in"
#define _fout "energii.out"
int i,j,n,m,E[NMAX],G[NMAX],cid1[GMAX],cid2[GMAX],w,s=0;
void mem_cpy(int [], int [], int);
void ReadData(void)
{
int i;
freopen(_fin,"r",stdin);
scanf("%d%d",&n,&w);
for (i=1;i<=n;i++)
{
scanf("%d%d",&E[i],&G[i]);
s+=G[i];
}
fclose(stdin);
}
void SnackPack(void)
{
int i,j;
for (i=1;i<=n;i++)
{
mem_cpy(cid1,cid2,s);
if (E[i] > cid2[G[i]])
cid2[G[i]]=E[i];
for (j=0;j<=s && cid2[j]<=w;j++)
if (cid2[j] != 0 && cid2[j+G[i]] < cid2[j] + E[i])
cid2[j+G[i]]=cid2[j]+E[i];
}
}
void PrintData(void)
{
freopen(_fout,"w",stdout);
int i,rez;
for (i=1;i<=s;i++)
if (cid2[i] >= w)
{ rez=cid2[i]; break; }
printf("%d\n",rez);
fclose(stdin);
}
int main(void)
{
ReadData();
SnackPack();
PrintData();
return 0;
}
void mem_cpy(int A[], int B[], int n)
{
for (int i=0;i<=n;i++)
A[i]=B[i];
}