角谷猜想 記憶化搜尋

2021-06-28 20:09:34 字數 1247 閱讀 6139

時間限制: 1 s

空間限制: 32000 kb

所謂角谷猜想,即給定乙個正整數 n,對 n 反覆進行下列兩種變換:

1)如果n是偶數,就除以2;

2)如果n是奇數,就乘以3加1。

最後的結果總是1。

我們把從 n 變換到 1 所需要進行的變換次數稱做 n 的變換長度,如數字 7 的變換為:

7-22-11-34-17-52-26-13-40-20-10-5-16-8-4-2-1

共進行了 16 次變換,因而 7 的變換長度為 16。

wish 現在對乙個給定區間內的最長變換長度比較感興趣,但是手算起來計算量太大,於是他又找到了參加資訊學競賽的你,

你可以幫助他嗎?

輸入描述 input description

每個測試點包含多組資料,第一行乙個數 t,表示資料個數。

第二行至第 t+1 行,每行兩個數 a、b,表示求 a 和 b 之間數(包含 a、b)的最長變換長度。

輸出描述 output description

輸出格式

t 行,每行輸出對應輸入資料的各個區間的最長變換長度。

樣例輸入 sample input

21 7

9 20

樣例輸出 sample output

1620

資料範圍及提示 data size & hint

資料範圍

1 <= t <= 100

1 <= a, b <= 10^8

區間長度不超過 10^5

本題的思路就是開乙個大點的陣列預先存放好結果, 然後再記憶化搜尋就快多了,介於本題的數量級

要用到64位整數

#include#includeint a[1000000];
//dfs這裡應該很好理解吧

int dfs(long long i)

if (i % 2 == 0)

return dfs(i / 2) + 1;

else return dfs(i * 3 + 1) + 1;

}int main()

int m, n, j, t, sum;

scanf("%d", &t);

while (t--)

sum = 0;

for (i = m; i <= n; i++)

printf("%d\n", sum);

} return 0;

}

codevs2969角谷猜想(記憶化搜尋 分塊)

所謂角谷猜想,即給定乙個正整數 n,對 n 反覆進行下列兩種變換 1 如果n是偶數,就除以2 2 如果n是奇數,就乘以3加1。最後的結果總是1。我們把從 n 變換到 1 所需要進行的變換次數稱做 n 的變換長度,如數字 7 的變換為 7 22 11 34 17 52 26 13 40 20 10 5...

驗證角谷猜想

total submission s 7305 accepted submission s 3767 problem description 數論中有許多猜想尚未解決,其中有乙個被稱為 角谷猜想 的問題,該問題在 五 六十年代的美國多個著名高校中曾風行一時,這個問題是這樣描述的 任何乙個大於一的自然...

21 角谷猜想

總時間限制 1000ms 記憶體限制 65536kb 描述 所謂角谷猜想,是指對於任意乙個正整數,如果是奇數,則乘3加1,如果是偶數,則除以2,得到的結果再按照上述規則重複處理,最終總能夠得到1。如,假定初始整數為5,計算過程分別為16 8 4 2 1。程式要求輸入乙個整數,將經過處理得到1的過程輸...