Cod sursa(job #999919)

Utilizator Ionut228Ionut Calofir Ionut228 Data 21 septembrie 2013 18:01:35
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin("energii.in");
ofstream fout("energii.out");

const int INF = 0x3f3f3f3f;

int N, W;
int best[10001 + 5002], sol;
int energie[1001], cost[1001];

int main()
{
    fin >> N >> W;
    for (int i = 1; i <= N; ++i)
        fin >> energie[i] >> cost[i];

    int maxim = 0;
    memset(best, -1, sizeof(best));
    sol = INF;
    best[0] = 0;
    for (int i = 1; i <= N; ++i)
        for (int gr = maxim; gr >= 0; --gr)
        {
            if (best[gr] != -1 && (best[gr + energie[i]] > best[gr] + cost[i] || best[gr + energie[i]] == -1))
            {
                best[gr + energie[i]] = best[gr] + cost[i];
                if (gr + energie[i] > maxim && gr + energie[i] < W)
                    maxim = gr + energie[i];
                if (gr + energie[i] >= W && best[gr] + cost[i] < sol)
                    sol = best[gr] + cost[i];
            }
        }

    fout << sol;

    fin.close();
    fout.close();
    return 0;
}