51 nod 1400 序列分解 dfs 剪枝

2021-07-27 20:11:37 字數 1266 閱讀 8942

1400 序列分解

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 

難度:4級演算法題

小刀和大刀是雙胞胎兄弟。今天他們玩乙個有意思的遊戲。 大刀給小刀準備了乙個長度為n的整數序列。小刀試著把這個序列分解成兩個長度為n/2的子串行。

這兩個子串行必須滿足以下兩個條件:

1.他們不能相互重疊。

2.他們要完全一樣。

如果小刀可以分解成功,大刀會給小刀一些糖果。

然而這個問題對於小刀來說太難了。他想請你來幫忙。

input

第一行給出乙個t,表示t組資料。(1<=t<=5)

接下來每一組資料,輸入共2行。

第一行包含乙個整數n (2<=n<=40且為偶數)。

第二行給出n個整數a[0],a[1],a[2],…,a[n-1]表示大刀給小刀準備的序列。(-1,000,000,000<=a[i]<=1,000,000,000)

output

如果小刀可以完成遊戲,輸出"good job!!" (不包含引號),否則 輸出"what a pity!" (不包含引號)。
input示例

2

41 1 2 2

61 2 3 4 5 6

output示例

good job!!

what a pity!

題意:給乙個長度為n的陣列,判斷是否可以將其分為兩個完全相同長度為n/2的子串行;

解:dfs,從起點遍歷,開兩個序列陣列,1 當前遍歷的位置如果和第乙個序列中的相對應的位置相同則加入第二個序列中 第乙個序列的對應位置加1,2 或者加入第乙個序列中延伸長度

#include #include #include #include #include #include #include using namespace std;

typedef long long ll;

const int n = 50;

int a[n], b[n], c[n];

int flag, n;

void dfs(int pos,int len1,int len2,int st)

if(pos==1)

else

b[len1]=a[pos];

dfs(pos+1,len1+1,len2,st);

}return ;

}int main()

return 0;

}

51nod 序列分解(dfs)

1400 序列分解 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 小刀和大刀是雙胞胎兄弟。今天他們玩乙個有意思的遊戲。大刀給小刀準備了乙個長度為n的整數序列。小刀試著把這個序列分解成兩個長度為n 2的子串行。這兩個子串行必須滿足以下兩個條件 1.他們不能相互重疊...

51nod1228 序列求和

設t n n k,s n n i 1t i 給出n和k,求s n 例如k 2,n 5,s n 1 2 2 2 3 2 4 2 5 2 55。由於結果很大,輸出s n mod 1000000007的結果即可。t 5000 k 2000 n 10 18 n很大,所以複雜度不應該帶n 關於求自然數冪和,這...

51nod 1228 序列求和

t n n k,s n t 1 t 2 t n 給出n和k,求s n 例如k 2,n 5,s n 1 2 2 2 3 2 4 2 5 2 55。由於結果很大,輸出s n mod 1000000007的結果即可。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 5000 第2 t ...