Java—普及组—2023年2.7日

Feishi11 2023-02-07 13:06:58

 装箱问题: 01背包


import java.util.Scanner;

public class Main{
    static final int N = (int) (2e4 + 5);

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int v = sc.nextInt();
        int n = sc.nextInt();
        int[] a = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
        }
        int[] dp = new int[N];
        for (int i = 1; i <= n; i++) {
            for (int j = v; j >= a[i]; j--) {
                dp[j] = Math.max(dp[j], dp[j - a[i]] + a[i]);
            }
        }
        System.out.println(v - dp[v]);
    }
}

装箱问题:数据量很小可以DFS


import java.util.Scanner;

public class Main{
    static int n, a[];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int v = sc.nextInt();
        n = sc.nextInt();
        a = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
        }
        dfs(v, 1);
        System.out.println(min);
    }

    static int min = 9999999;

    static void dfs(int v, int sta) {
        if (v < 0) {
            return;
        } else {
            min = Math.min(min, v);
        }
        for (int i = sta; i <= n; i++) {
            dfs(v - a[i], i + 1);
        }
    }
}

分巧克力:二分答案

import java.io.*;

public class Main{
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    static int n, k, a[], b[];

    public static void main(String[] args) throws IOException {
        String[] s = br.readLine().split(" ");
        n = Integer.parseInt(s[0]);
        k = Integer.parseInt(s[1]);
        a = new int[n + 1];
        b = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            s = br.readLine().split(" ");
            a[i] = Integer.parseInt(s[0]);
            b[i] = Integer.parseInt(s[1]);
        }
        int l = 1, r = (int) (1e5 + 5);
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (check(mid)) {
                l = mid;
            } else {
                r = mid - 1;
            }
        }
        out.println(l);
        out.flush();
        br.close();
        out.close();
    }
    static boolean check(int mid) {
        long ans = 0;
        for (int i = 1; i <= n; i++) {
            ans += (a[i] / mid) * (b[i] / mid);
        }
        return ans >= k;
    }
}

进击的奶牛:二分答案


import java.io.*;
import java.util.Arrays;

public class Main{
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    static int n, c;
    static long[] a;
    public static void main(String[] args) throws IOException {
        n = sc.nextInt();
        c = sc.nextInt();
        a = new long[n + 1];
        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextLong();
        }
        Arrays.sort(a);
        int l = 1, r = (int) (1e9 + 5);
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (check(mid)) {
                l = mid;
            } else {
                r = mid - 1;
            }
        }
        out.println(l);
        out.flush();
        out.close();
    }
    static boolean check(int mid) {
        int ans = 1;
        for (int i = 2, j = 1; i <= n; i++) {
            if (a[i] - a[j] >= mid) {
                j = i;
                ans++;
            }
        }
        return ans >= c;
    }

    static class sc {
        static final StreamTokenizer sca = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

        static int nextInt() throws IOException {
            sca.nextToken();
            return (int) sca.nval;
        }

        static long nextLong() throws IOException {
            sca.nextToken();
            return (long) sca.nval;
        }
    }
}

选数:DFS


import java.math.BigInteger;
import java.util.Scanner;

public class Main{
    static int n, k, a[];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        k = sc.nextInt();
        a = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
        }
        dfs(1, 0, 0);
        System.out.println(ans);
    }

    static int ans = 0;

    static void dfs(int sta, int m, int sum) {
        if (m == k) {
            if (new BigInteger(sum + "").isProbablePrime(100)) {
                ans++;
            }
            return;
        }
        for (int i = sta; i <= n; i++) {
            dfs(i + 1, m + 1, sum + a[i]);
        }
    }
}

 

...全文
38 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
高校算法学习社区

4.3w+

社区成员

和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
帖子事件
创建了帖子
2023-02-07 13:06
社区公告

 刷题!