Cod sursa(job #1336122)

Utilizator valentin50517Vozian Valentin valentin50517 Data 6 februarie 2015 18:34:38
Problema Energii Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
using namespace std;

int G,W,E[1003],C[1003],DP[2][10010],h,N;
bool u = true;
ifstream fin("energii.in");
ofstream fout("energii.out");

int min(int a,int b){
	 if(a == 0) return b; 
else if(b == 0) return a;
else if(a > b) return b; else return a;
}

int energii(){
	fin >> G >> W;
	for(int i = 1; i<=G;i++){
 		fin >> E[i] >> C[i];
	}
	for(int i = 1;i<=G;i++){
		h+=E[i];
		if(h < W) N = h;else N = W;
		for(int j = 1;j<=N;j++){
			if(E[i] < j){
				DP[u][j]  = min(DP[!u][j-E[i]] + C[i],DP[!u][j]);
			}else if (DP[!u][j] == 0) DP[u][j] = C[i];
			 else DP[u][j] = min(C[i],DP[!u][j]);
		}
		u = !u;
	}
	return DP[!u][W];
}

int main(){
   fout << energii();
	return 0;
}