洛谷1118 數字三角形遊戲
題目描述
有這麼乙個遊戲:
寫出乙個1~n的排列a[i],然後每次將相鄰兩個數相加,構成新的序列,再對新序列進行這樣的操作,顯然每次構成的序列都比上一次的序列長度少1,直到只剩下乙個數字位置。下面是乙個例子:
3 1 2 4
4 3 6
7 9
16最後得到16這樣乙個數字。
現在想要倒著玩這樣乙個遊戲,如果知道n,知道最後得到的數字的大小sum,請你求出最初序列a[i],為1~n的乙個排列。若答案有多種可能,則輸出字典序最小的那乙個。
輸入輸出格式
輸入格式:
兩個正整數n,sum。
輸出格式:
輸出包括1行,為字典序最小的那個答案。
當無解的時候,請什麼也不輸出。(好奇葩啊)
輸入輸出樣例
輸入樣例#1:
4 16
輸出樣例#1:
3 1 2 4
說明對於40%的資料,n≤7;
對於80%的資料,n≤10;
對於100%的資料,n≤12,sum≤12345。
【思路】
dfs+楊輝三角。
以題目資料為例:16=7+9=4+3+3+6=3+1+1+2+1+2+2+4=1*3 + 3*1 + 3*2 + 1*4
所以可以推出公式sum=∑ yni*ai
狀態包括深度與和,知道了公式可以剪去 和 超過sum的搜尋。
【**】
1 #include2 #include3using
namespace
std;45
const
int maxn = 14;6
7int
n,m;
8int
a[maxn],vis[maxn];
9int
yn[maxn];
1011
void
get_yn() 16}
17void dfs(int d,int
sum)
22if(sum>m) return;23
for(int i=1;i<=n;i++) if(!vis[i]) 29}
3031
intmain()
洛谷P1118 數字三角形
這道題是典型的深搜題,應用全排列遍歷的方法可以在無特判的條件下完成。其中的幾個知識點是需要複習的。楊輝三角 楊輝三角定義在此不表,其為乙個形似下表的數表 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 以下略 a b c d e a b b c c d d e a 2b c b 2c d...
SSL ZYC 洛谷 P1118 數字三角形
題目大意 有這麼乙個遊戲 寫出乙個1 n的排列a i 然後每次將相鄰兩個數相加,構成新的序列,再對新序列進行這樣的操作,顯然每次構成的序列都比上一次的序列長度少1,直到只剩下乙個數字位置。下面是乙個例子 3 1 2 4 4 3 6 7 9 16 最後得到16這樣乙個數字。現在想要倒著玩這樣乙個遊戲,...
洛谷1216 數字三角形
題目描述 觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 02 7 4 4 4 5 2 6 5 在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 輸入輸出格式 輸入格...