Cod sursa(job #677793)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 10 februarie 2012 18:04:07
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

#define maxN 5005
#define INF 0x3f3f3f3f

int N , P , c[maxN] , p[maxN] , a[maxN][maxN];

int main ()
{
	freopen ("energii.in" , "r" , stdin);
	freopen ("energii.out" , "w" , stdout);
	
	scanf ("%d %d" , &N , &P);
	
	for (int i = 1 ; i <= N ; ++i)
		scanf ("%d %d" , &p[i] , &c[i]);
	
	for (int i = 1 ; i <= P ; ++i)
		if (i <= p[1])
			a[1][i] = c[1];
	
	for (int i = 1 ; i <= N ; ++i)
		for (int j = 1 ; j <= P ; ++j)
			if (!a[i][j])
				a[i][j] = INF;
	
	for (int i = 2 ; i <= N ; ++i)
		for (int j = 1 ; j <= P ; ++j)
			if (p[i] <= j)
				a[i][j] = min (a[i - 1][j] , a[i - 1][j - p[i]] + c[i]);
			
			else
				a[i][j] = min (a[i - 1][j] , c[i]);

	if (a[N][P] == INF)
	{
		printf ("-1");
		return 0;
	}
	
	printf ("%d" , a[N][P]);
	
	return 0;
}