Cod sursa(job #1674167)

Utilizator andrei.mardaleAndrei Mardale andrei.mardale Data 4 aprilie 2016 14:18:56
Problema Energii Scor 95
Compilator java Status done
Runda Arhiva de probleme Marime 1.45 kb
//package energiiDynamic;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

public class Main {
	
	public int solve (int[] e, int[] c, int g, int w){
		int[][] m = new int[g][w+1];
		int i, j;
		for (i = 0; i < g; i++){
			m[i][0] = 0;
		}
		for (i = 1; i <= w; i++){
			if (e[0] >= i)
				m[0][i] = c[0];
			else {
				m[0][i] = Integer.MAX_VALUE;
			}
		}
		
		for ( i = 1; i < g; i++){
			for (j = 1; j <= w; j++){
				if (e[i] <= j){
					if (m[i-1][j-e[i]] != Integer.MAX_VALUE)
						m[i][j] = Math.min(m[i-1][j], c[i]+m[i-1][j-e[i]]);
					else 
						m[i][j] = Integer.MAX_VALUE;
				}
				else { // e[i] > j
					m[i][j] = Math.min(c[i], m[i-1][j]);
				}
			}
		}
		
		return m[g-1][w];
	}

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("energii.in"));
		String line = br.readLine();
		int g = Integer.parseInt(line);
		int[] e = new int[g];
		int[] c = new int[g];
		line = br.readLine();
		int w = Integer.parseInt(line);
		int i;
		for (i = 0; i < g; i++){
			line = br.readLine();
			String[] splitted = line.split("\\s+");
			e[i] = Integer.parseInt(splitted[0]);
			c[i] = Integer.parseInt(splitted[1]);
		}
		
		PrintWriter pw = new PrintWriter("energii.out");
		
		pw.write(String.valueOf(new Main().solve(e, c, g, w) + "\n"  ));
//		System.out.println(new Main().solve(e, c, g, w));
		
		
		
		br.close();
		pw.close();

	}

}