0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

メモ書き

Posted at

コードの全貌

bitsearch.cpp
int main() {
    //ios::sync_with_stdio(false);
    //cin.tie(0);

    int n,w;
    cin >> n >> w;
    vector<int> v(n);

    for(int i = 0; i < n; i++) {
        cin >> v[i];
    }

    bool exist = false;

    for(int bit = 0; bit < (1 << n); bit++) {
        int sum = 0;
        for(int i = 0; i < n; i++) {
            if(bit & (1 << i)) {
                sum += v[i];
            }
        }
        if(sum == w) {exist = true;}
    }
    if(exist) cout << "Yes" << endl;
    else cout << "No" << endl;
}

これまでわかっていなかったことと、今した理解

didnt_understand_part.cpp
for(int bit = 0; bit < (1 << n); bit++)

こう書くときに「bitを使っているんだな」と表層のことしか理解していなかったが、

奥の方.cpp
if(bit & (1 << i)) {
    sum += v[i];
}

このパートでbitの0と1だけの性質が一役買っていることに気付いた。
多分、
「00000001」→「00000010」→「00000011」...
のように進み、1の立っているところのインデックスだけベクターから数値を足して考えているのだと捉えられた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?