Cod sursa(job #748635)

Utilizator TheShadowsAlexandru Cristian TheShadows Data 14 mai 2012 11:46:28
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<stdio.h>
int energ[10001],g,w,lastvisit=0,mincost=-1; //comp -1
void isBetter(int x)
{
    if(mincost==-1||mincost>x)
        mincost=x;
    return;
}
void insert(int en,int cst)
{
    int start;
    if(lastvisit<en)
    {
        lastvisit=en;
        start=en;
    }
    else
        start=lastvisit;
    if(lastvisit>w)
        lastvisit=w;
    int newen,newcost;
    for(int i=start; i>=1; i--)
    {
        if(energ[i]>-1)
        {
            newen=i+en;
            newcost=energ[i]+cst;
            if(newcost<energ[newen])
            {
                energ[newen]=newcost;
                if(newen>=w)
                    isBetter(newcost);
            }
        }
    }
    if(energ[en]>cst||energ[en]==-1)
    {
        newen=en;
        newcost=cst;
        energ[newen]=newcost;
        if(newen>=w)
            isBetter(newcost);
    }
    return;
}
void initial()
{
    for(int i=1; i<=10000; i++)
        energ[i]=-1;
    return;
}
int main()
{
    FILE *in=fopen("energii.in","r"),*out=fopen("energii.out","w");
    fscanf(in,"%d%d",&g,&w);
    int e,cost;
    initial();
    for(int i=1; i<=g; i++)
    {
        fscanf(in,"%d%d",&e,&cost);
        insert(e,cost);
    }
    fprintf(out,"%d\n",mincost);
    return 0;
}