子集合的和


提交答案


分數: 100 (部分)
時間限制: 1.0s
記憶體限制: 256M

作者:
題目類型

窮舉法是一種藝術,例如下列集合\(\{1, 2, 3\}\)我們可以簡單地知道它的子集合數是\(8\),分別為 \(\{1\}, \{2\} \{1, 2\}, \{3\}, \{1, 3\}, \{2, 3\}, \{1, 2, 3\}\) 以及空集合\(\{\}\)。

對於一個程式碼而言,枚舉一個有\(n\)個數的集合的子集合的時間複雜度是\(O(2^n)\),窮舉它們有很多方法,其中一個簡單的方法是用\(for\)迴圈從\(0\)跑到\(2^n-1\),再將其二進制中的每個位元代表對應元素要取或不要取,即可枚舉出子集合。

拿集合\(\{1, 2, 3\}\)為例,\(3\)轉成二進制為\(011\)可以代表\(子集合_3\)沒有\(1\),有\(2, 3\)

\(koukirocks\)遇到一個題目

輸入\(n\)個整數,請計算並輸出各種組合中,其合之最大值。每個元素可選取或不選取但不可重複選取。

輸入的數為\(C++\)中 \(int\) 不會溢位的數,\(1 \le n \le 40\)。


輸入說明

第一行為一個整數 \(n\) 第二行為 \(n\) 個可挑選的整數,同行數字以一個空白間隔。 輸入的數皆為 \(C++\) 中 \(int\) 不會溢位的數

輸出說明

輸出所有組合之和中的最大值 都不選取視為 \(0\)

範例輸入1

3
1 2 3

範例輸出1

6

範例說明1

範例中的組合分別為\( \{1\}, \{2\}, \{1, 2\}, \{3\}, \{1, 3\}, \{2, 3\}, \{1, 2, 3\} \)以及空集合 \(\{\}\),其和分別為\(1, 2, 3, 3, 4, 5, 6\),其中最大為\(6\),故輸出\(6\)


子題配分

編號 範圍 分數 前置條件
1 \( 2 \le 2^n < 10^9 \) 40
2 \( 1 \le n \le 40 \) 60 子題 1

留言

目前沒有評論。