Cod sursa(job #3355445)

Utilizator alexanca_Alexandru anca alexanca_ Data 22 mai 2026 20:03:55
Problema Problema rucsacului Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.72 kb
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());
    }
}