遞迴加一些思考(鑰匙計數之二)

2021-08-06 05:00:56 字數 1098 閱讀 9980

題目:

f - 鑰匙計數之二

time limit:1000ms memory limit:32768kb 64bit io format:%i64d & %i64u

description

一把鑰匙有n個槽,2

本題很難想到用遞迴去做,並且除了遞迴還需要想清楚一些特殊的東西。

1. 當n-1是鑰匙的時候,則考慮他n-1位是不是1或者6.那麼是a[n]+=a[n-1]*5,如果不是那麼就要a[n]=a[n-1]*6.所以,要定義乙個陣列將n-1的時候。以6或者1 結尾的要存起來。

2. 當n-1不是鑰匙的時候,那麼只有前面n-1是有2個不同的深度組成,同時避免,1和6相連。所以這裡的情況我分四種情況。

(1)當前面沒有1或者6的時候並且最後一位不是1或者6的時候。那麼就是c(4,2)*(pow(2,i-1)-2)*2;

(2)當前面沒有1或者6的時候,最後一位是 1或者6的時候,用其他陣列將他存起來。為c(4,2)*(pow(2,i-1)-2)*2;

(3)當前面有1或者6的時候。最後一位不是1或者6的時候。為4*2*(pow(2,i-1)-2)*3

(4)當前面有1或者6的時候,最後一位是1或者6 的時候。這個時候,就要考慮前面n-2位了。既n-1位一定你選的那2個數中不是1或者6 的那個數,這樣最後一位才會是1或者6.此時情況位4*2*(pow(2,i-2)-1)。注意這裡是減1.不是減2。因為全面n-2位全為1111是可以的。要想清楚哦。

(雖然自己前面寫的可能不清楚,但是看**就知道了)

**:

#include

#include

#include

#include

using

namespace

std;

int main()

for(i=3;i<26;i++)

cout

<<'n'

<<'='

<':'

<<' '

0;}

(還有乙個類似的題目,更這個是相反的 2017暑假集訓16級-遞推 - virtual judge

可以值得做的)

關於遞迴的一些思考

遞迴函式一般有兩種模式,請看下面。include define cutoff 3 void swap int a,int b void insertionsort int array,int len else array j 1 temp int median3 int a,int left,int...

關於計數中斷迴圈的一些錯誤思考

for int i 1 i n i 對於這個 我們要注意這個是先進行條件判斷,再進行計數判斷。如果存在剛開始就已經符合k了的話,這種就會少考慮了。同樣,如果是這樣 for int i 1 i n i 把中斷條件放到最後的話,也會少考慮一些情況如,最後一此迴圈 i n時達成count 此時符合coun...

對於Android MVP的一些思考(二)

上次對mvp的表面概念作出了一些思考 對於mvp 響應式程式設計以及事件匯流排的一些思考 而隨著對自己的mvp框架深入優化 擴充套件,也發現了一些疑惑的地方。相信接觸過mvp框架的都清楚,針對model view presenter這三者,都會為其單獨建立乙個inte ce,規範其各自的行為。舉個例...