Cod sursa(job #1717706)

Utilizator aurasslamMihai Aurelian aurasslam Data 15 iunie 2016 16:31:27
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#define MAXVAL 100000001

using namespace std;
int G, W, d[50001], i, j;
struct generator
{int c,e;
};
generator v[50000];

int minim(int a, int b) {
	return a > b ? b : a;
}

int main()
{   freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);
    cin>>G>>W;
	for (i = 1; i <= 20000; i++) d[i] = MAXVAL;
    for(i=1; i<=G; ++i)
        cin>>v[i].e>>v[i].c;
	for(i=1; i<=G; i++)
    {
        for(j=W; j>0; j--)
		{
			if(d[j] != MAXVAL)
			{
				d[j + v[i].e] = minim(d[j + v[i].e], d[j] + v[i].c);
				/*if(j+v[i].e <= W)
				{
					if(d[j+v[i].e]==0 || d[j+v[i].e]>d[j]+v[i].c)
						d[j+v[i].e]=d[j]+v[i].c;
				}
				else
				{
					if(d[W]==0 || d[W]>d[j]+v[i].c)
						d[W]=d[j]+v[i].c;
				}*/
			}
		}
		d[v[i].e] = minim(d[v[i].e], v[i].c);
    }
	int min = MAXVAL;
	for (i = W; i <= 20000; i++) min = minim(min, d[i]);
	
    if(min != MAXVAL)
        cout<<min;
    else
		cout<<-1;
    return 0;
}