Cod sursa(job #75791)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP 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;
}