Pagini recente » Borderou de evaluare (job #3343925) | Monitorul de evaluare | Cod sursa (job #3344809) | Cod sursa (job #787474) | Cod sursa (job #3355445)
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
MyScanner sc = new MyScanner("rucsac.in");
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("rucsac.out")));
int n = sc.nextInt();
int g = sc.nextInt();
int[] w = new int[n]; // greutatile
int[] p = new int[n]; // profiturile
for (int i = 0; i < n; i++) {
w[i] = sc.nextInt();
p[i] = sc.nextInt();
}
// dp[j] va retine profitul maxim care se poate obtine cu o greutate totala <= j
int[] dp = new int[g + 1];
// Parcurgem fiecare obiect
for (int i = 0; i < n; i++) {
// Parcurgem greutatile de la maxim (g) in jos, pana la greutatea obiectului curent.
// Mergem de la dreapta la stanga pentru a NU folosi acelasi obiect de doua ori.
for (int j = g; j >= w[i]; j--) {
dp[j] = Math.max(dp[j], dp[j - w[i]] + p[i]);
}
}
out.println(dp[g]);
out.close();
}
}
class MyScanner {
BufferedReader br;
StringTokenizer st;
public MyScanner(String fileName) throws FileNotFoundException {
br = new BufferedReader(new FileReader(fileName));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
String line = br.readLine();
if (line == null) return null;
st = new StringTokenizer(line);
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
}