P1118 USACO06FEB 數字三角形

2021-08-19 11:10:05 字數 1083 閱讀 9225

有這麼乙個遊戲:

寫出乙個1~n的排列a[i],然後每次將相鄰兩個數相加,構成新的序列,再對新序列進行這樣的操作,顯然每次構成的序列都比上一次的序列長度少1,直到只剩下乙個數字位置。下面是乙個例子:

3 1 2 4

4 3 6

7 9 16 最後得到16這樣乙個數字。

現在想要倒著玩這樣乙個遊戲,如果知道n,知道最後得到的數字的大小sum,請你求出最初序列a[i],為1~n的乙個排列。若答案有多種可能,則輸出字典序最小的那乙個。

[color=red]管理員注:本題描述有誤,這裡字典序指的是1,2,3,4,5,6,7,8,9,10,11,12

而不是1,10,11,12,2,3,4,5,6,7,8,9[/color]

輸入格式:

兩個正整數n,sum。

輸出格式:

輸出包括1行,為字典序最小的那個答案。

當無解的時候,請什麼也不輸出。(好奇葩啊)

以下楊輝三角的係數推算參考 sweetlemon(洛谷網)

如果n為4,那麼sum是a+3b+3c+d。

如果n為5,那麼sum是a+4b+6c+4d+e。

如果n為6,那麼sum是a+5b+10c+10d+5e+f。

觀察各項的係數,你發現了什麼?

那麼我們就可以列舉每個a,b,c,...,逐一與sum比較,就可以得出答案了。

首先,計算楊輝三角。

我使用的是這樣乙個公式(狀態轉移方程):

如果楊輝三角的狀態轉移方程推算出來,這道題就是乙個很簡單的dfs,貼**

#include

using namespace std;

int n,sum;

int a[100],book[100],flag;

int ans[100];

void dfs(int step,int su) //step表示第幾個數,su表示當前總和 

else 

return ;

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

int main()

P2858 USACO06FEB 奶牛零食

約翰經常給產奶量高的奶牛發特殊津貼,於是很快奶牛們擁有了大筆不知該怎麼花的錢 為此,約翰購置了n 1 n 2000 份美味的零食來賣給奶牛們 每天約翰售出乙份零食 當然約翰希望這些零食全部售出後能得到最大的收益 這些零食有以下這些有趣的特性 零食按照1 n編號,它們被排成一列放在乙個很長的盒子裡 盒...

P2983 USACO10FEB 購買巧克力

題解 注意題目開 long long 貪心策略 從低到高,買夠為止 反證 若剩下的有乙個k 比k小,那麼交換,穩賺不賠 所以,在買k之前,所有比他便宜的都買完了 include include include include include include include include using...

洛谷 P2894 USACO08FEB 酒店

題目描述 用線段樹維護三個值 區間最長空位長度,從左端點可以延伸的最長空位長度,從右端點可以延伸的最長空位長度。include include using namespace std const int n 2e6 7 int n,m intlen n max n maxl n maxr n laz...