Mai intai trebuie sa te autentifici.

Cod sursa(job #748638)

Utilizator TheShadowsAlexandru Cristian TheShadows Data 14 mai 2012 12:11:10
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>
#include<iostream>
using namespace std;
int energ[15001],g,w,lastvisit=0,mincost=-1; //comp -1
void isBetter(int x)
{
    if(mincost==-1||mincost>x)
        mincost=x;
    return;
}

void afisare()
{
    for(int i=1;i<=10;i++)
        cout<<"energ["<<i<<"] = "<<energ[i]<<"\n";
    cout<<"<...>\n";
}

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,i;
    for(i=w-1; i>=1; i--)
    {
        if(energ[i]>-1)
        {
            newen=i+en;
            newcost=energ[i]+cst;
            if(newcost<energ[newen]||energ[newen]==-1)
            {
                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);
    }
    //afisare();
}
void initial()
{
    for(int i=1; i<=15000; 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;
}