Cod sursa(job #75791)
Utilizator | Data | 5 august 2007 18:19:19 | |
---|---|---|---|
Problema | Energii | Scor | 95 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.04 kb |
#include <stdio.h>
#include <string.h>
typedef struct
{
long e,c;
} generator;
long n,w;
generator v[2001];
long cost[16001],ex[16001];
void iofile(void)
{
long i;
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
scanf("%ld",&n);
scanf("%ld",&w);
memset(cost,0,sizeof(cost));
memset(ex,0,sizeof(ex));
for (i=1;i<=n;i++)
{
scanf("%ld%ld",&v[i].e,&v[i].c);
}
fclose(stdin);
}
void solutie(void)
{
long i,j,cmin,es;
cmin=100000000;
ex[0]=1;
cost[0]=0;
es=0;
if (w==0)
{
cmin=0;
es=1;
}
for (i=1;i<=n;i++)
for (j=w-1;j>=0;j--)
if (ex[j]==1)
{
if (cost[j+v[i].e]==0)
{
cost[j+v[i].e]=cost[j]+v[i].c;
ex[j+v[i].e]=1;
if (j+v[i].e>=w)
if (cost[j+v[i].e]<cmin)
{
cmin=cost[j+v[i].e];
es=1;
}
} else
{
if (cost[j+v[i].e]>cost[j]+v[i].c)
{
cost[j+v[i].e]=
cost[j]+v[i].c;
if (j+v[i].e>=w)
if (cost[j+v[i].e]<cmin)
{
cmin=cost[j+v[i].e];
es=1;
}
}
}
}
if (cmin==100000000)
{
printf("%d\n",-1);
} else
{
printf("%ld\n",cmin);
}
fclose(stdout);
}
int main(void)
{
iofile();
solutie();
return 0;
}