Cod sursa(job #1098548)

Utilizator xtreme77Patrick Sava xtreme77 Data 4 februarie 2014 21:29:39
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#define MAX 5550
#define MAXX 100000100

using namespace std;
struct rucsac{
    int w,pret;
}q[MAX];
int minim(int a,int b);
int n,k,d[MAXX],i,j,min,aux;
int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;++i)scanf("%d%d",&q[i].w,&q[i].pret);
    for(i=1;i<=k;++i)d[i]=MAX*MAX;
    d[0]=0;
    min=MAX*MAX;
    for(j=1;j<=n;++j){
        for(i=k;i>=0;--i)
        {
            if(d[i]!=MAX*MAX){
                aux=d[i]+q[j].pret;
                if(!d[i+q[j].w])d[i+q[j].w]=MAX*MAX;
                d[i+q[j].w]=minim(d[i+q[j].w],aux);
                if(i+q[j].w>=k)
                    if(d[i+q[j].w]<min)min=d[i+q[j].w];
                if(i>=k)
                    if(d[i]<min)min=d[i];
            }
        }
    }
    if(min!=MAX*MAX)
    printf("%d\n",min);
    else printf("-1\n");

    return 0;
}
int minim(int a,int b)
{
    if(a>b)return b;
    return a;
}