Cod sursa(job #676526)

Utilizator PatrikStepan Patrik Patrik Data 9 februarie 2012 11:23:40
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
	#include<stdio.h>
	#define INF 51000000
	FILE *f , *g ;
	int n , w  ;
	long c[2][5001]  , rez ;
	struct A{
		int p,c;
	}v[1001];
	
	void citire();
	void solve();
	void tipar();
	long min(long x , long y)
	{
		if(x < y)
			return x;
		return y;
	}
	
	int main()
	{
		citire();
		solve();
		tipar();
		return 0;
	}
	
	void citire()
	{
		f=fopen("energii.in" , "r" );
		fscanf(f , "%d%d" , &n , &w );
		for(int i = 1 ; i<= n ; ++i )
			fscanf(f , "%d%d" , &v[i].p , &v[i].c );
		fclose(f);
	}
	
	void solve()
	{
		for(int i = 1 ; i<= w ; ++i )
			c[0][i] = INF;
		int x = 1;
		for(int i = 1 ; i<= n ; ++i ,x = 1-x)
			for(int j = 1 ; j <= w ; ++j )
				if(v[i].p < j)
					c[x][j] = min(v[i].c+c[1-x][j-v[i].p],c[1-x][j]);
				else
					c[x][j] = min(v[i].c,c[1-x][j]);
		if(c[1-x][w] == INF)
			rez = -1;
		else
			rez = c[1-x][w];
	}
	
	void tipar()
	{
		g=fopen("energii.out" , "w" );
		fprintf(g , "%ld" , rez );
		fclose(g);
	}