Pagini recente » Cod sursa (job #1445486) | Cod sursa (job #672118) | Cod sursa (job #347605) | Cod sursa (job #952910) | Cod sursa (job #693027)
Cod sursa(job #693027)
#include<cstdio>
using namespace std;
int n,w,a[3][5010],e[1010],p[1010],sum[1010],i,j;
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%d%d",&n,&w);
for(i=1;i<=n;i++)
{
scanf("%d%d",&e[i],&p[i]);
sum[i]=sum[i-1]+e[i];
}
if(sum[n]<w)
printf("%d",-1);
else
{
for(i=1;i<=e[1];i++)
{
a[1][i]=p[1];
}
for(i=2;i<=n;i++)
{
for(j=1;j<=w;j++)
{
if(e[i]>=j)
{
if(p[i]>a[(i-1)%2][j])
a[i%2][j]=a[(i-1)%2][j];
else
a[i%2][j]=p[i];
if(a[i%2][j]==0)
a[i%2][j]=p[i];
}
else
{
if(a[(i-1)%2][j]<a[(i-1)%2][j-e[i]]+p[i])
a[i%2][j]=a[(i-1)%2][j];
else
a[i%2][j]=a[(i-1)%2][j-e[i]]+p[i];
if(a[i%2][j]==0)
a[i%2][j]=a[(i-1)%2][j-e[i]]+p[i];
if(sum[i]<j)
a[i%2][j]=0;
}
}
}
}
printf("%d",a[n%2][w]);
return 0;
}