使用單位分數的和表示有理數。 例如 2/3 = 1/2 + 1/6; 加數不能有重複。0此題目解答樹寬度和深度都沒有上限,不能直接用bfs或者dfs。
解決方案是採用迭代加深搜尋:從小到大列舉深度上限。
inta, b;
int tree[1000
];bool dfs(int deep, int cb, int sa, int
sb )
else
return dfs( deep-1, 2, _a, _b); //
移向下一層
return
false;}
void
iterativedeepening()
for (int i = 0; i <=deep; i++)
}int
main ()
system(
"pause");
return0;
}
Vijos 1308 埃及分數(迭代加深搜尋)
輸入a b,求a b 可以由多少個埃及分數組成。埃及分數是形如1 a a是自然數的分數。如2 3 1 2 1 6,但埃及分數中不允許有相同的 如不可以2 3 1 3 1 3.求出可以表達a b個數最少埃及分數方案,如果個數相同則選取最小的分數最大。include define ll long lon...
codevs1288 埃及分數 迭代加深 剪枝
在古埃及,人們使用單位分數的和 形如1 a的,a是自然數 表示一切有理數。如 2 3 1 2 1 6,但不允許2 3 1 3 1 3,因為加數中有相同的。對於乙個分數a b,表示方法有很多種,但是哪種最好呢?首先,加數少的比加數多的好,其次,加數個數相同的,最小的分數越大越 好。如 19 45 1 ...
迭代加深搜尋
深度優先搜尋每次選定乙個分支,然後往下搜尋,直到遞迴邊界 才回溯。這種策略有一點缺陷,那就是當搜尋樹的分支數目特別 多,並且答案在某個較淺的節點上,如果dfs在一開始就選錯了分 支,那就會在沒有答案的深層次浪費時間 當搜尋樹規模隨著層次的深入增長很快,並且能 夠確保答案在乙個較淺的節點上時,就可以使...