問題描述
給定乙個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...