Cod sursa(job #948312)

Utilizator raduchirilaChirila Radu Razvan raduchirila Data 9 mai 2013 22:02:28
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
using namespace std;
const int MaxN = 1001, MaxS = 5001;
int   n, s, v[MaxN], cost[MaxN];
int   c[MaxS];
int   Minim = 999999999;
int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    int i, j, k;
    scanf("%d%d",&n,&s);
    for (int k=1; k<=n; ++k)
        scanf("%d%d",&v[k],&cost[k]);
    for (j=1; j<=s; ++j) c[j] = -1;
    c[0] = 0;
    for (i=1; i<=n; ++i)
        for (j=s; j>=0; --j)
            if (c[j] != -1)
            {
                if (j + v[i] > s)
                    if (Minim > c[j] + cost[i])
                        Minim = c[j] + cost[i];
                if (j + v[i] <= s)
                    if (c[j + v[i]] > c[j] + cost[i] || c[j + v[i]] == -1)
                        c[j + v[i]] = c[j] + cost[i];
            }
    if (c[s] == -1 && Minim == 999999999)
        printf("-1");
    else{
        if(Minim < c[s])
        printf("%d",Minim);
        if(c[s]<Minim)
        printf("%d",c[s]);
    }
    return 0;
}