Cod sursa(job #911555)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 11 martie 2013 19:28:27
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
using namespace std;
 
 
const int MaxN = 1001, MaxS = 5001;
 
int   N, S, v[MaxN], cost[MaxN];
int   c[MaxS];
int   Minim = 999999999;
 
 
void ReadData(void)
{
    ifstream fin("energii.in");
 
    fin >> N >> S;
    for (int k=1; k<=N; ++k)
        fin >> v[k] >> cost[k];
 
    fin.close();
}
 
int main(void)
{
    int i, j, k;
 
    ReadData();
 
    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];
            }
 
    ofstream fout("energii.out");
    if (c[S] == -1 && Minim == 999999999)
        fout << -1;
    else
        fout << (Minim < c[S] ? Minim : (c[S] == -1 ? Minim : c[S]));
    fout.close();
 
    return 0;
}