Cod sursa(job #1589965)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 4 februarie 2016 16:35:50
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <cmath>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
#include <map>
#include <iomanip>
#include <time.h>
#include <stdio.h>
#include <bitset>
#define MAX 500000000000
//#include <iostream>
using namespace std;
ifstream cin("energii.in");
ofstream cout("energii.out");
int DP[2][5006005];
int main()
{
    int n, s, x[1004], y[1005], g;
    cin >> n >> g;
    s = 0;
    for(int i = 1; i <= n; i++){
        cin >> x[i] >> y[i];
        s += x[i];
    }
    if(s < g)
    {
        cout << -1;
        return 0;
    }
    int l = 0;
    for(int i = 0; i <= 1; i++)
        for(int j = 0; j <= s; j++)
            DP[i][j] = 1<<30;
    for(int i = 1; i <= n; i++, l = 1 - l){
        for(int j = 0; j <= g; j++){
            if(j <= x[i])
                DP[l][j] = min(DP[1 - l][j], y[i]);
            else
                DP[l][j] = min(DP[1 - l][j], DP[1 - l][j - x[i]] + y[i]);
        }
    }
    /*for(int i = 0; i <= 2; i++){
        for(int j = 1; j <= g; j++)
            cout << DP[i][j] << " ";
        cout << "\n";
    }*/
    cout << min(DP[0][g], DP[1][g]);
    return 0;
}