1142 巡邏的士兵

2022-03-07 22:26:26 字數 1206 閱讀 2569

該題有題解

時間限制:1000ms  記憶體限制:65536k

提交次數:217 通過次數:58

題型: 程式設計題   語言: g++;gcc

有n個士兵站成一佇列, 現在需要選擇幾個士兵派去偵察。

為了選擇合適的士兵, 多次進行如下操作: 如果佇列超過三個士兵, 那麼去除掉所有站立位置為奇數的士兵,

或者是去除掉所有站立位置為偶數的士兵。直到不超過三個戰士,他們將被送去偵察。現要求統計按這樣的方法,

總共可能有多少種不同的正好三個士兵去偵察的士兵組合方案。

注: 按上法得到少於三士兵的情況不統計。

1 <= n <= 2的32次方-1

有多行,每行乙個數字n,最後一行是0

對每一行的數字n,輸出針對n的方案數

直到沒有數字

10

40

2

0

admin

巡邏的士兵—遞推。試從n=3開始一直往後寫,就能得到這麼乙個遞推公式:如果n為偶數 那麼答案a[n]=2*a[n/2]; 如果為奇數 則為a[n]=a[n/2]+a[n/2+1];直接遞迴可以壓線過,,但先預處理一小部分再在遞迴時用記憶化的話會快很多。

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

9 #include 10 #include 11 #include 12 #include 13 #include 14

#define ll long long

15#define inf 0x3f3f3f3f

16using

namespace

std;

1718

int a[5005];//

用於預處理的陣列

19int recur(int

n)20

28int

main()

2940

//41

intn;

42while(scanf("

%d",&n)&&n)

43 printf("

%d\n

",recur(n));

44return0;

45 }

scauoj 1142 巡邏的士兵

有n個士兵站成一佇列,現在需要選擇幾個士兵派去偵察。為了選擇合適的士兵,多次進行如下操作 如果佇列超過三個士兵,那麼去除掉所有站立位置為奇數的士兵,或者是去除掉所有站立位置為偶數的士兵。直到不超過三個戰士,他們將被送去偵察。現要求統計按這樣的方法,總共可能有多少種不同的正好三個士兵去偵察的士兵組合方...

SCAU 1142 巡邏的士兵

時間限制 1000ms 長度限制 10kb 提交次數 217 通過次數 58 題型 程式設計題 語言 g gcc description 有n個士兵站成一佇列,現在需要選擇幾個士兵派去偵察。為了選擇合適的士兵,多次進行如下操作 如果佇列超過三個士兵,那麼去除掉所有站立位置為奇數的士兵,或者是去除掉所...

1142 巡邏的士兵(C )(遞迴演算法)

description 有n個士兵站成一佇列,現在需要選擇幾個士兵派去偵察。為了選擇合適的士兵,多次進行如下操作 如果佇列超過三個士兵,那麼去除掉所有站立位置為奇數的士兵,或者是去除掉所有站立位置為偶數的士兵。直到不超過三個戰士,他們將被送去偵察。現要求統計按這樣的方法,總共可能有多少種不同的正好三...