Pagini recente » Cod sursa (job #483741) | Cod sursa (job #2476367) | Cod sursa (job #1681395) | Cod sursa (job #2129686) | Cod sursa (job #222434)
Cod sursa(job #222434)
#include<stdio.h>
#define N 1002
#define INF 2000000000
int e[N],c[N],v[5*N],n,w;
void citire()
{
scanf("%d%d",&n,&w);
for (int i=1; i<=n;++i)
scanf("%d%d",&e[i],&c[i]);
}
int rucsac ()
{
for (int j=1; j<=w; ++j)
v[j]=INF;//initial consider costurile infinite (pt energii care nu pot fi obtinute)
for (int i=1; i<=n; ++i)//iau fiecare generator in parte
for (int j=w-1; j>=0; --j)//caut energii care pot fi obtinute cu gen 1,2..i-1
if (v[j]!=INF)//daca energia j poate fi obtinuta cu generatoarele dinainte (1,2..i-1)
{
if (j+e[i]>=w && v[j]+c[i]<v[w])//daca prin adaugarea gen i obtin energie>=w (suficienta)
v[w]=v[j]+c[i];//daca am un cost mai mic pt pornirea centralei, il retin
if (j+e[i]<w && v[j]+c[i]<v[j+e[i]])//pt cazul in care obtin energie<w cu cost mai bun
v[j+e[i]]=v[j]+c[i];
}
if(v[w]==INF)
return -1;
return v[w];
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
citire();
printf("%d\n",rucsac());
return 0;
}