洛谷P1057傳球遊戲(逆向遞推遞迴 記憶化)

2022-06-24 15:18:09 字數 1530 閱讀 3443

剛看到這道題,就是正向暴力遞迴暴力出所有情況,而且資料範圍這麼小,就寫了暴力遞迴,但是。。。tle好幾個點。。。

仔細跟著程式走了一遍樣例,發現暴力遞迴過程中好多點都重複計算,重複暴力了,so就改變思維寫了逆向遞推遞迴+記憶化ac了

需要注意的是:環,邊界處理,有的人用的取餘方法,我用的if特判的方法。

暴力遞迴

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8

using

namespace

std;

9 typedef long

long

ll;10 typedef unsigned long

long

ull;

11const

int maxn=1e6+5;12

inta[maxn];

13int

n,m;

14int

ans;

1516

void so(int last,int

step)

1723

24int r=last+1,l=last-1;25

if(r>n) r=1;26

if(l<1) l=n;

27 so(r,step+1

);28 so(l,step+1

);29}30

31int

main()

32

遞推遞迴+記憶化

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8

using

namespace

std;

9 typedef long

long

ll;10 typedef unsigned long

long

ull;

11const

int maxn=1e6+5;12

inta[maxn];

13int ans[1005][1005

];14

intn,m;

15int f=0;16

17int so(int last,int

step)

1827

28int r=last+1,l=last-1;29

if(r>n) r=1;30

if(l<1) l=n;

31int ans=0

;32 ans=ans+so(r,step-1

);33 ans=ans+so(l,step-1

);34

35 ans[last][step]=ans;

36return

ans[last][step];37}

3839

intmain()

40

完。

洛谷 P1057 傳球遊戲

題目描述 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出...

洛谷 P1057 傳球遊戲

題目描述 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出...

P1057 傳球遊戲 洛谷

上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出去的那個同...