Pagini recente » Cod sursa (job #900290) | Cod sursa (job #2791216) | Cod sursa (job #1370606) | Cod sursa (job #3187028) | Cod sursa (job #1150461)
#include <iostream>
#include <cstdio>
using namespace std;
int Putere[10001],Cost[10001],Val[10001],s,i,N,W,sc,j,sol=999999;
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
cin>>N>>W;
for(i=1;i<=N;i++)
{
cin>>Putere[i]>>Cost[i];
if(Putere[i]>=W)
{
if(Cost[i]<sol)
sol=Cost[i];
}
s=s+Putere[i];
sc=sc+Cost[i];
}
if(s<W)
cout<<-1;
if(s==W)
cout<<sc;
if(s>W)
{
Val[Cost[1]]=Putere[1];
for(i=2;i<=N;i++)
{
for(j=W;j>=Cost[i];j--)
{
if(Val[j]!=0)
{
if(j+Cost[i]>=W)
{
if(Val[j]+Val[Cost[i]]<sol)
sol=Val[j]+Val[Cost[i]];
}
else
{
if(Val[j+Cost[i]]!=0)
Val[j+Cost[i]]=min(Val[j+Cost[i]],Val[j]+Val[Cost[i]]);
else
Val[j+Cost[i]]=Val[j]+Val[Cost[i]];
}
}
}
if(Val[Cost[i]]==0 || Val[Cost[i]]>Putere[i])
Val[Cost[i]]=Putere[i];
}
}
cout<<sol;
return 0;
}