時間限制: 1 sec 記憶體限制: 64 mb
題目描述
九連環是由九個彼此套接的圓環和一根橫桿組成,九個環從左到右依次為l~9,每個環有兩種狀 態:1和0,1表示環在杆上,0表示環不在杆上。初始狀態是九個環都在杆上,即:111111111,目標狀態是九個環都不在杆上,即:000000000,由初始狀態到目標狀態的變化規則是:
(1)第一環為無論何時均可自由上下橫行;
(2)第二隻環只有在第一環為1時,才能自由上下;
(3)想要改變第n(n>2)個環的狀態,需要先使第一到第(n-2)環均為下桿,且第n-1個環為上杆,而與第n+l個到第九環狀態無關;
(4)每改變乙個環,記為一步。
現在九連環由111111111變到000000000,求中間第i步的狀態。
輸入僅包含乙個整數i。
輸出僅包含中間第i步的狀態。如果輸入的步數大於實際變換所需的步數,則輸出-1。
樣例輸入
【樣例1】
2【樣例2】
500樣例輸出
【樣例1】
010111111
【樣例2】
-1腦子不夠。。
題目大意:
給你步數,讓你解九連環,看能解到什麼狀態,其中1實在九連環上,0是不在。
解題思路:
九連環的解法是,要解下第n個,就要n-2及其之前的都必須解下來,n-1在上面,這樣才能解下第n個,同時剩下n-1個在上面。特別的,第乙個可以自由上下。所以,就是很明顯的遞迴。note:**裡0是沒有解下來,1是已經解下來。遞迴函式:
引數——ring的編號。
終止條件:步數為0的時候。
遞迴過程,首先要判斷第n-1個是否在上面,如果不在就要讓他在上去;
然後遍歷n-2之前的是否在上面,如果在,就讓他們下來。
#include
#include
#include
#include
//#define local
using
namespace std;
typedef
unsigned
long
long ull;
typedef
long
long ll;
const
int n =
2e4+5;
const
int inf =
0x3f3f3f3f
;const
int mod =
998244353
;int n;
int ring[10]
;void
dfs(
int m)
intmain()
return0;
}
時間限制: 1 sec 記憶體限制: 64 mb
題目描述
任何乙個正整數都可以用2的冪次方表示。例如:
137 =2
7+23
+2
0137=2^7+2^3+2^0
137=27
+23+
20同時約定方次用括號來表示,即a
ba^b
ab可表示為a(b
)a(b)
a(b)
。由此可知,137
13713
7可表示為:
2 (7
)+2(
3)+2
(0
)2(7)+2(3)+2(0)
2(7)+2
(3)+
2(0)
進一步:7=2
2+2+
20(2
1用2表
示)3=
2+20
7=2^2+2+2^0 (2^1用2表示) 3=2+2^0
7=22+2
+20(
21用2
表示)3
=2+2
0所以最後137
13713
7可表示為:
2 (2
(2)+
2+2(
0))+
2(2+
2(0)
)+2(
0)
2(2(2)+2+2(0))+2(2+2(0))+2(0)
2(2(2)
+2+2
(0))
+2(2
+2(0
))+2
(0)又如:
1315=2
10+2
8+25
+2+2
01315=2^10 +2^8 +2^5 +2+2^0
1315=2
10+2
8+25
+2+2
0所以1315
1315
1315
最後可表示為:
2 (2
(2+2
(0))
+2)+
2(2(
2+2(
0)))
+2(2
(2)+
2(0)
)+2+
2(0)
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
2(2(2+
2(0)
)+2)
+2(2
(2+2
(0))
)+2(
2(2)
+2(0
))+2
+2(0
) 輸入一行,乙個正整數(n≤20000)
輸出符合約定的n的0,2表示(在表示中不能有空格)
樣例輸入
137樣例輸出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
解題思路:
①看見別人有暴力打表解決問題的;②遞迴的思路:
明確目的:求n的二次冪表示的各個指數,順序是從高到低,之後將各個指數再進行「拆分操作」。
遞迴函式:
引數:當前的n值和遞迴的深度(2的指數)。
終止條件:n==1的時候
函式print(n,0)就是求n的「2的冪次方」表示,所以,遞迴呼叫print(n,0)就可以解決問題。(當然,當n<=2的時候,直接按格式輸出就可以。)
#include
#include
#include
#include
//#define local
using
namespace std;
typedef
unsigned
long
long ull;
typedef
long
long ll;
const
int n =
1e4+5;
const
int inf =
0x3f3f3f3f
;const
int mod =
998244353
;int n;
void
print
(int n,
int deep)
if(deep==1)
if(deep==2)
if(deep>2)
}else}}
}int
main()
遞推與遞迴
遞推與遞迴 遞推像是多公尺諾骨牌,遞迴是大事化小。遞推的效率更高 遞推 斐波那契數列 例 母親為兒子的四年大學學費準備了一筆存款,兒子每月月底取下月生活費1000元。銀行年利率為 1.71 畢業時連本帶息要取出 1000 元。則要存入多少錢。include define rate 0.0171 in...
遞推與遞迴
遞迴 將問題規模為n的問題,降解成若干個規模為n 1的問題,依次降解,直到問題規模可求,求出低階規模的解,代入高階問題中,直至求出規模為n的問題的解。遞推 構造低階的規模 如規模為i,一般i 0 的問題,並求出解,推導出問題規模為i 1的問題以及解,依次推到規模為n的問題。遞迴包括回溯和遞推兩個過程...
遞迴與遞推
1 遞迴與遞推的定義 前者是 後者是對以前的問題進行計算,以得出當前問題的大結果。2 它們的典例和運用遞迴 遞推dfs,搜尋與回溯 動態規劃 用遞推能做的,記憶化搜尋定能夠實現 遞推僅能求方案數,求具體方案需用遞迴 3 各種關於遞推的例題 爬樓梯 數樓梯 兔子問題 includeusing name...