solution.java 1.2 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
import java.util.Scanner;

public class DFS {
    static int max = -1; // 记录最大值
    static int n, k;
    static int[] num = new int[100010];
    static int[] mark = new int[4]; // 记录每一步存储的数字
    static boolean[] flag = new boolean[100010]; // 给num一个标记位 是否被使用过
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        n = sc.nextInt();
        k = sc.nextInt();
        for (int i = 0; i < n; i++) {
            num[i] = sc.nextInt();
        }
        dfs(0);
        System.out.println(max);
    }

    // 使用深搜
    public static void dfs(int step) {
        // 判断结束条件
        if (step == 3) {
            int temp = mark[0] + mark[1] + mark[2];
            if (temp % k == 0) {
                max = Math.max(max, temp);
                return;
            }
        }
        for (int i = 0; i < n; i++) {
            if (!flag[i]) { // 如果i还没有被记录过
                flag[i] = true; // 给 这个数字设置标志位
                mark[step] = num[i]; // 在mark中存储 这一位数字
                dfs(step + 1);
                flag[i] = false; // 循环结束 释放标记位
            }
        }
    }
}