Cod sursa(job #1671134)

Utilizator mirunazMiruna Zavelca mirunaz Data 1 aprilie 2016 13:03:50
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int suma[10000001],m,n,i,j,pp,sm,w;
struct tacos{int cant,cost;};
tacos v[1001];
bool sortare(tacos a,tacos b)
{
    return a.cost<b.cost;
}
FILE *in,*out;
int main ()
{
    in=fopen("energii.in","r");
    out=fopen("energii.out","w");
    fscanf(in,"%d%d",&n,&w);
    for(i=1;i<=n;i++)
        fscanf(in,"%d %d",&v[i].cant,&v[i].cost);
    sort(v+1,v+n+1,sortare);
    pp=0;
    m=10000001;
    sm=v[1].cant;
    suma[v[1].cant]=v[1].cost;
    for(i=2;i<=n;i++)
    {
        for(j=sm;j>0;j--)
        {
            if(suma[j]!=0 && (suma[j+v[i].cant]==0 || suma[j+v[i].cant]>suma[j]+v[i].cost))
                suma[j+v[i].cant]=suma[j]+v[i].cost;
        }
        if(suma[v[i].cant]==0)
            suma[v[i].cant]=v[i].cost;
        sm+=v[i].cant;
    }
    /*for(i=1;i<=sm;i++)
        fprintf(out,"%d\n",suma[i]);*/
    for(i=w;i<=sm;i++)
        if(suma[i]>0 && suma[i]<m)
            m=suma[i];
    if(m==10000001)
        m=-1;
    fprintf(out,"%d",m);
    return 0;
}