五大基礎演算法 列舉

2021-09-25 17:42:38 字數 1631 閱讀 7473

1、定義

按照問題的要求,一一枚舉所有有可能的解,然後進行判斷,若符合要求則採納這個解,不符合就拋棄。

2、演算法實現

第一部分(迴圈部分):

利用迴圈把所有有可能的解,一一枚舉出來。需注意不能遺漏任何乙個解,也要避免重複。

要考慮如何設計迴圈變數、初值、終值和遞增值。迴圈變數是否參與檢驗。

為了提高解題效率,盡可能的縮小列舉範圍。

第二部分(檢驗);

準確找出判斷條件,對每乙個解進行檢驗。

3、列舉演算法例項

第一題:分數拆分(fractions again?!,uva 10976)

輸入乙個正整數k,找到所有的正整數x>=y,使得1/k=1/x+1/y。

樣例輸入212

樣例輸出

21/2 = 1/6 + 1/3

1/2 = 1/4 + 1/4

81/12 = 1/156 + 1/13

1/12 = 1/84 + 1/14

1/12 = 1/60 + 1/15

1/12 = 1/48 + 1/16

1/12 = 1/36 + 1/18

1/12 = 1/30 + 1/20

1/12 = 1/28 + 1/21

1/12 = 1/24 + 1/24

解題思路:由給出的式子,和x>=y,可知,k#include #include #include #include #include using namespace std;

int main()

}printf("%d\n",cnt);

for(int i=k+1;i<=2*k;i++)

}}return 0;

}第二題 除法(division,uva 725)

輸入正整數n,按從小到大的順序輸出所有形如abcde/fghij = n的表示式,

其中aj恰好為數字09的乙個排列(可以有前導0),2<=n<=79。

如果不存在 ,則輸出there are no solutions for n.n為0是結束程式。

樣例輸入

6162

0樣例輸出

there are no solutions for 61.

79546 / 01283 = 62

94736 / 01528 = 62

解題思路:列舉分母從1234~98765 ,用陣列a[10]來判斷是否重複。

**如下:

#include #include #include #include #include #include #include using namespace std;

int main()

; int x,m,j,b,k;

for(int i=1234;i<=98765;i++)

a[m]=1;

x=x/10;

}if(j==5)

a[m]=1;

x=x/10;

}if(k==5) }}

if(flag==0) printf("there are no solutions for %d.\n",n);

}return 0;

}

五大常用演算法 例項列舉

五大常用演算法 例項列舉 1.分治法 話說遞迴與hanoi塔 二分法求方程近似解 用c 實現合併排序 求最大值和最小值的分治演算法 2.動態規劃法 動態規劃求0 1揹包問題 最長公共子串問題的實現 用動態規劃實現飛彈攔截 最大化投資回報問題的實現 3.貪心演算法 最小生成樹之prim演算法 最小生成...

五大基礎演算法 分治法

1 定義 分治法的主題思想就是分而治之,也就是說把乙個大原問題變成兩個或者多個小問題解決,最後把小問題的解合併起來就是原問題的解。分 將原問題分解為多個小問題 治 將這些小問題逐個解決 合 將小問題解合併,就得出原問題的解 2.演算法實現 a 分治法的正規化 分解問題 把原問題分解為若干個與原問題性...

五大常用演算法

主要是演算法演算法的複雜度 1.分治法 話說遞迴與hanoi塔 二分法求方程近似解 用c 實現合併排序 求最大值和最小值的分治演算法 2.動態規劃法 動態規劃求0 1揹包問題 最長公共子串問題的實現 用動態規劃實現飛彈攔截 最大化投資回報問題的實現 3.貪心演算法 最小生成樹之prim演算法 最小生...