Cod sursa(job #336990)

Utilizator drag0s93Mandu Dragos drag0s93 Data 2 august 2009 11:44:01
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<cstdio>
#include<vector>
using namespace std;

#define IN "energii.in","r",stdin
#define OUT "energii.out","w",stdout
#define PII pair<int,int>
#define w first 
#define c second
#define INF 999999999

int M[1020][10010];
int g , w ;
PII V[1020];

int main()
{
	freopen(IN);
	freopen(OUT);
	scanf("%d%d",&g,&w);
	for(int i = 1; i <= g ; ++i)	scanf("%d%d",&V[i].w,&V[i].c);
	
	//initializare:
	
	M[0][0] = 0;
	for(int i = 1 ; i <= 10000 ; ++i)
		M[0][i] = INF;
	//prog. dinamica:
	
	for(int i = 1 ; i <= g ; ++i)
	{
		M[i][0] = 0;
		for(int j = 1 ; j <= 10000 ; ++j)
		{
			M[i][j] = M[i-1][j];
			if (j >= V[i].w && M[i - 1][j - V[i].w] + V[i].c < M[i][j])
				M[i][j] = M[i - 1][j - V[i].w] + V[i].c;
		}
	}
	int enmin = M[g][w];
	for(int i = w + 1  ; i <= 10000 ; ++i)
		if(M[g][i] < enmin)	enmin= M[g][i];
	
	if(enmin == INF ) 
	{
		printf("-1\n");
		return 0;
	}
	printf("%d\n",enmin);
	return 0;
}