列舉法的基本思想是根據題目的部分條件確定答案的大致範圍,並在次範圍內對所有可能的情況逐一驗證,直到全部情況驗證完畢。若某個情況驗證符合題目的全部條件,則為本問題的乙個解;若全部情況驗證後都不符合題目的全部條件,則本題無解。也稱為窮舉法。
題目:某人有n袋金幣,其中第i袋內金幣的數量是ai。現在他決定選出2袋金幣送給小hi,再選2袋金幣送給小ho,同時使得小hi和小ho得到的金幣總數相等。他想知道一共有多少種不同的選擇方法。窮舉法是通過犧牲時間來換區答****性與全面性。需要注意的是控制迴圈的次數,即時間複雜度。當語句執行達到10^8次時,大概是1s(1000ms)(ps:記住這個時間,以便在做題時判斷大致時間,做到竟可能的保險)。具體來說,有多少種下標四元組(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 qinput: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
第一行包含乙個整數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;
}
列舉(窮舉)演算法
一 所謂列舉 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...