野獣


ブール関数アルゴリズム


Bootforsアルゴリズムを学ぶ前に、Bootforsの辞書の意味を理解してみましょう.
Brute Force
ブルート:獣のように狂暴だ
Force:暴力、暴力
=>「獣のように暴れて無知」
Bootforsは、すべての組み合わせ可能な状況をナビゲートし、比較し、必要な答えを見つけることができる完全なナビゲーションアルゴリズムです.
このアルゴリズムの最も強力な利点は、常に100%の精度に基づいていることです.
誘導砲を使用するには、太陽が存在すると予想されるすべての資料を参照する必要があります.そのため、特定の構造を全面的に参照する方法が必要です.
BootForで使われているアルゴリズムを見てみましょう.
線形構造全体でのナビゲーションの順序
DFS、BFS、非線形構造における全面的なナビゲーション用
非線形構造ではBoot ForsはBFSをより多く用いた.
本稿では,線形構造におけるナビゲーションのタイプがBackjun 2798であるという問題について論じる.
白駿2798号へ

問題は、N枚のカードの中から3枚を選択し、出力の結果がMに最も近く最小であることです.
この問題を見て、線形構造の配列にN枚のカードを入力し、その配列を順番にナビゲートし、3種類のカードを繰り返し追加する必要はないと思います.
つまり、for文を三重文として使えばいいと思います.ただし、for文を使用する場合は、タイムアウトを考慮する必要があります.
問題ではNの数が100以下に制限されているため,三重文を用いても100 x 100 x 100は1秒で100万個の制限を10,000にまで解放できる.
max値を指定すると、計算される値が既存のmax値より大きく、M未満の場合、更新できます.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int [] cards = new int[N];
        st = new StringTokenizer(br.readLine()," ");
        
        for(int i = 0; i<N;i++)
            cards[i] = Integer.parseInt(st.nextToken());
        

        int max = 0, temp = 0;
        
        for(int i = 0; i<N-2;i++){
            for(int j = i+1; j<N-1; j++){
                for(int k = j+1; k<N;k++){
                    temp = cards[i] + cards[j] + cards[k];
                    if(temp <= M)
                        max = Math.max(max,temp);
                }
            }
        }
        System.out.println(max);

    }
}