演算法之暴力列舉(窮舉)

2021-08-21 13:55:29 字數 1122 閱讀 4635

列舉法的基本思想是根據題目的部分條件確定答案的大致範圍,並在次範圍內對所有可能的情況逐一驗證,直到全部情況驗證完畢。若某個情況驗證符合題目的全部條件,則為本問題的乙個解;若全部情況驗證後都不符合題目的全部條件,則本題無解。也稱為窮舉法。

題目:某人有n袋金幣,其中第i袋內金幣的數量是ai。現在他決定選出2袋金幣送給小hi,再選2袋金幣送給小ho,同時使得小hi和小ho得到的金幣總數相等。他想知道一共有多少種不同的選擇方法。

具體來說,有多少種下標四元組(i, j, p, q)滿足i, j, p, q兩兩不同,並且i < j, p < q, ai+ aj = ap + aq。  

例如對於陣列a=[1, 1, 2, 2, 2],一共有12種選法:

i j p q

1 3 2 4

1 3 2 5

1 4 2 3

1 4 2 5

1 5 2 3

1 5 2 4

2 3 1 4

2 3 1 5

2 4 1 3

2 4 1 5

2 5 1 3

2 5 1 4

input:

第一行包含乙個整數n。  

第二行包含n個整數,a1, a2, a3 ... an。

對於70%的資料,1 <= n <= 100  

對於100%的資料,1 <= n <= 1000, 1 <= ai <= 1000000

eg:1 1 2 2 2

output:

不同選擇的數目。

eg:**舉例:

#include

#include

using namespace std;

int main()

for(int i = 0; i < n; i++)

}for(int i = 0; i < n; i++)

else}}

cout << con << endl;

return 0;

}

窮舉法是通過犧牲時間來換區答****性與全面性。需要注意的是控制迴圈的次數,即時間複雜度。當語句執行達到10^8次時,大概是1s(1000ms)(ps:記住這個時間,以便在做題時判斷大致時間,做到竟可能的保險)。

列舉(窮舉)演算法

一 所謂列舉 1 列舉法的本質就是從所有候選答案中去搜尋正確的解。它的核心思想就是列舉所有的可能 2 使用該演算法需要滿足兩個條件 1 可預先確定候選答案的數量 2 候選答案的範圍在求解之前必須有乙個確定的集合 3 基本框架 二 基本思想 1 列舉演算法簡單粗暴,他暴力的列舉所有可能,盡可能地嘗試所...

列舉 窮舉 演算法

列舉法的本質就是從候選答案中去搜尋正確的解,使用該演算法需要滿足兩個條件 例 填數字遊戲 abcde x e eeeeee 問a,b,c,d,e各為多少?如下 例 填運算子5 運算子1 5 運算子2 5 運算子3 5 運算子4 5 5 問運算子各位啥滿足等式,且該等式不能用括號。分析 由於算術表示式...

啊哈演算法之暴力列舉

列舉演算法又叫做窮舉演算法。將數字1 9分別填入9個 中,每個數字只能使用一次使得等式成立。暴力窮舉法 include include int main printf total d n total 2 system pause return 0 標記法 用乙個book陣列來解決互不相等的問題。in...