試題 演算法訓練 數字遊戲

2022-08-28 10:15:10 字數 1698 閱讀 7158

問題描述

給定乙個1~n的排列a[i],每次將相鄰兩個數相加,得到新序列,再對新序列重複這樣的操作,顯然每次得到的序列都比上一次的序列長度少1,最終只剩乙個數字。

例如:

3 1 2 4

4 3 6

7 9

16

現在如果知道n和最後得到的數字sum,請求出最初序列a[i],為1~n的乙個排列。若有多種答案,則輸出字典序最小的那乙個。資料保證有解。

輸入格式

第1行為兩個正整數n,sum

輸出格式

乙個1~n的乙個排列

樣例輸入

4 16

樣例輸出

3 1 2 4

資料規模和約定

0

思路1:帶有技巧的搜尋 先由資料找規律 可聯想到楊輝三角 進行打表 然後暴搜

y陣列楊輝三角打表 a陣列記錄路徑

bool

vis[n];

void dfs(int cur, int s) //

cur當前第幾個數 s表示總數

}for (int i = 1; i <= n; i ++)

//圖中的例題係數 1 3 3 1 正好對應楊輝三角第4行

} //

即第n行

}int

main()

思路2:全排列思想 無腦做就完事了

#include #include 

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n = 15

;int

n, sum;

inta[n];

intmain()

} while (next_permutation(a + 1, a + n + 1

));

return0;

}

試題 演算法訓練 數字遊戲

題目鏈結 問題描述 給定乙個1 n的排列a i 每次將相鄰兩個數相加,得到新序列,再對新序列重複這樣的操作,顯然每次得到的序列都比上一次的序列長度少1,最終只剩乙個數字。例如 3 1 2 4 4 3 6 7 916 現在如果知道n和最後得到的數字sum,請求出最初序列a i 為1 n的乙個排列。若有...

演算法訓練 數字遊戲

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個1 n的排列a i 每次將相鄰兩個數相加,得到新序列,再對新序列重複這樣的操作,顯然每次得到的序列都比上一次的序列長度少1,最終只剩乙個數字。例如 3 1 2 4 4 3 6 7 916 現在如果知道n和最後得到的數字sum...

藍橋杯VIP試題 演算法訓練 數字遊戲 C C

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個1 n的排列a i 每次將相鄰兩個數相加,得到新序列,再對新序列重複這樣的操作,顯然每次得到的序列都比上一次的序列長度少1,最終只剩乙個數字。例如 3 1 2 4 4 3 6 7 916 現在如果知道n和最後得到的數字sum...