我是寫遞迴+dp
因為是連續輸入 所以我就把在前幾輪跑過的數字放進map裡
下一個輸入需要用的時候拿出來用
(算是dp嗎xd)
不過網路上看到有人直接用while迴圈
我試著丟上去也AC了
對比一下執行時間 我的方法大概快了1ms
但記憶體多了快1mb
需要dp嗎?我覺得不用
----
順帶一提 我把cin cout改成scanf printf直接TLE (1s)
不知道是不是我寫錯 因為要從14ms變到1s是真的蠻邪門的
我是寫遞迴+dp
因為是連續輸入 所以我就把在前幾輪跑過的數字放進map裡
下一個輸入需要用的時候拿出來用
(算是dp嗎xd)
不過網路上看到有人直接用while迴圈
我試著丟上去也AC了
對比一下執行時間 我的方法大概快了1ms
但記憶體多了快1mb需要dp嗎?我覺得不用
----
順帶一提 我把cin cout改成scanf printf直接TLE (1s)
不知道是不是我寫錯 因為從14ms變到1s是真的蠻邪門的
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define space ' '
map<int,int> dp;
int loop (int num)
{
if (num == 1 || dp[num] != 0) return dp[num];
dp[num] = ((num%2) ? loop(num*3+1):loop(num/2))+1;
return dp[num];
}
main ()
{
int i, j;
while(cin>>i>>j){
int maxNumber = -1;
for (int cnt = min(i, j); cnt<=max(i, j); cnt++) {
maxNumber = max(loop(cnt)+1, maxNumber);
}
cout<<i<<space<<j<<space<<maxNumber<<endl;
}
}
我是寫遞迴+dp
因為是連續輸入 所以我就把在前幾輪跑過的數字放進map裡
下一個輸入需要用的時候拿出來用
(算是dp嗎xd)
不過網路上看到有人直接用while迴圈
我試著丟上去也AC了
對比一下執行時間 我的方法大概快了1ms
但記憶體多了快1mb需要dp嗎?我覺得不用
----
順帶一提 我把cin cout改成scanf printf直接TLE (1s)
不知道是不是我寫錯 因為從14ms變到1s是真的蠻邪門的#include
using namespace std;
#define endl '\n'
#define space ' 'map dp;
int loop (int num)
{
if (num == 1 || dp[num] != 0) return dp[num];dp[num] = ((num%2) ? loop(num*3+1):loop(num/2))+1;
return dp[num];
}main ()
{
int i, j;
while(cin>>i>>j){
int maxNumber = -1;
for (int cnt = min(i, j); cnt<=max(i, j); cnt++) {
maxNumber = max(loop(cnt)+1, maxNumber);
}
cout< }
}
拍寫 上面打錯
我的方法是18ms 比人家用迴圈慢了3ms
直接用迴圈就好