Pagini recente » Cod sursa (job #1624273) | Cod sursa (job #830303) | Cod sursa (job #2130539) | Cod sursa (job #2572223) | Cod sursa (job #389641)
Cod sursa(job #389641)
#include<cstdio>
#include<cstdlib>
#define GMAX 1001
#define WMAX 5001
#define IN "energii.in"
#define OUT "energii.out"
#define min(a,b) (a)<(b)?(a):(b)
int G,W,best=99999999,w[WMAX];
typedef struct{
int e,c;
}generator;
generator g[GMAX];
FILE *f;
FILE *out;
int main ()
{
f=fopen(IN ,"r");
fscanf(f, "%d" , &G);
fscanf(f, "%d" , &W);
int i,j,max1=0;
for(i=1;i<=G;i++)
fscanf(f, "%d%d" , &g[i].e , &g[i].c);
w[0]=1;
for(i=1;i<=G;i++)
{
for(j=min(max1,5000);j>=0;j--)
if(j==0)
{
if(w[g[i].e]==0||w[g[i].e]>=g[i].c)
{
if(g[i].e<5001)
w[g[i].e]=g[i].c;
if(g[i].e>max1)
max1=g[i].e;
if(g[i].e>=W&&g[i].c<best)
best=g[i].c;
}
}
else
if(w[j]!=0)
{
if(w[j+g[i].e]==0||w[j+g[i].e]>=w[j]+g[i].c)
{
if(j+g[i].e<5001)
w[j+g[i].e]=w[j]+g[i].c;
if(j+g[i].e>max1)
max1=j+g[i].e;
if(j+g[i].e>=W&&w[j]+g[i].c<best)
best=w[j]+g[i].c;
}
}
}
out=fopen(OUT ,"w");
fprintf(out , "%d\n" , best);
return 0;
}