[Usaco2006 Oct]Another Cow Number Game 奶牛的數字遊戲 記憶化搜尋
阿新 • • 發佈:2019-01-28
奶牛們又在玩一種無聊的數字遊戲。輸得很鬱悶的貝茜想請你寫個程式來幫她在開局時預測結果。在遊戲的開始,每頭牛都會得到一個數N(1<=N<=1,000,000)。此時奶牛們的分數均為0。如果N是奇數,那麼奶牛就會把它乘以3後再加1。如果N是偶數,那麼這個數就會被除以2。數字每變動一次,這頭奶牛就得到1分。當N的值等於1時,遊戲結束,此時的分數就是這頭奶牛在這局遊戲中的最終得分。 以下是N的初始值為5時,一局遊戲的完整過程: N 操作後所得數 註釋 總分 5 16 3*5+1 1 16 8 16/2 2 8 4 8/2 3 4 2 4/2 4 2 1 2/2 5 這頭奶牛的最終得分是5。
這其實就是3*n+1問題
直接模擬的話就能過,需要注意中間過程會爆int
不過可以稍微加點記憶化
注意到1000W一下的數會被訪問很多次,所以記錄1000W以下的。
#include <iostream> using namespace std; int a[11111111]; int gao(long long x) { if(x == 1) return 1; if(x < 10000000 && a[x]) return a[x]; int tmp; if(x % 2 == 0) tmp = gao(x / 2) + 1; else tmp = gao(x * 3 + 1) + 1; if(x < 10000000) a[x] = tmp; return tmp; } int main() { int n; cin >> n; cout << gao(n) - 1<< endl; return 0; }