需要通過數字n,獲得數字k。
可以對n進行兩種操作,時間都是一分鐘,求最短用時。
n–或者n++;
n*=2;
採用bfs:即每一步可以向左右走一步,或者去n*2;當n>k時,只執行n–;時間複雜度為o(n)
採用dfs:對於n>k,只執行n–;當n k可以通過一直加1的方式得到k,或者先使n = k/2,再通過n2一步使得n== k;
當k是奇數,n -> k可以通過一直加1的方式得到k,或者先使n== k/2,再通過n2然後n++兩步使得n== k,或者先使n== k/2+1,再通過n*2然後n–兩步使得n==k。
時間複雜度為o(logn);
下面只給出dfs的解法
#include
#include
#include
using
namespace std;
long
dfs(
long n,
long k,
long step)
//k是偶數
else
}int
main()
return0;
}
題目讀錯,沒有讀到可以進行n++的操作,唯讀到n–,導致剛開始思路出現問題。
遞迴求解邏輯沒有理清楚,並且對於k是奇數的情況,少考慮一種情形。
採用bfs做法
牛客比賽
class
solution
return0;
}};
開兩個佇列就會記憶體超限。 poj3278 結題報告
這個題是乙個容易理解題意的簡單bfs題目.作為菜鳥的我竟然能自己想到解決方案.不容易.個人思路如下,農夫在每個點都有三種走法,我們先把初始位置標記為走過,三種方法位置沒走過就入隊,開始三個點都能入隊,再對三個點每次出隊乙個,分析這個點的三個位置能否走,能走得入隊,依此類推.這裡我用的訪問陣列是乘以個...
POJ 3278 解題報告
這道題是個bfs的問題,因為要求的是乙個相鄰節點間距離都為1的graph中兩個節點間的最短距離。一開始上來用的dfs,結果可想而知。3278 accepted 844k 63ms g 1192b id thestor1 lang c task poj3278 include include incl...
POJ 3278 題解 搜尋
牛 奶牛在k處不動 fj在n處去抓,最快要多長時間 某時刻fj的座標為x,fj有3種走法,每次每種走法1分鐘 往前走一步 往後走一步 傳送到2x處 time 1000 ms memory 65536 kb 搜尋 include include include include using namesp...