Sunnypig闖三角關

2022-05-31 11:36:11 字數 2047 閱讀 2174

貪玩的sunnypig請charles為他打造乙個奇幻世界,charles欣然答應了。然而一向善於出難題的charles是決不會輕易讓sunnypig輕鬆擁有乙個奇幻世界的,於是charles在建造過程中設定了重重機關,只有在sunnypig破解了這些障礙之後,才能嘗試到奇幻世界中最有玩頭的終極寶貝——時空穿梭機。雖然奇幻世界中其他的寶貝也很有趣,但貪玩的sunnypig怎能放過打boss的機會呢?於是他開始了破解障礙的旅程。

第二道障礙**於一種古老的數學發現——楊輝三角,不過應該是倒過來的楊輝三角。若給出1~n的乙個排列a,則將a1、a2相加,a2、a3相加……an-1、an相加,則得到一組n-1個元素的數列b;再將b1、b2相加,b2、b3相加,bn-2、bn-1相加,則得到一組n-2個元素的數列……如此往復,最終會得出乙個數t。而charles給sunnypig出的難題便是,給出n和t,再盡可能短的時間內,找到能通過上述操作得到t且字典序最小的1~n的排列。經過漢諾塔問題的訓練,sunnypig開始沉著的思考。。。

本題有多組資料,對於每組資料:

一行兩個整數n(0用檔案結尾符判斷輸入結束。

對於每組測試資料輸出一行n個整數,用空格分開,行尾無多餘空格,表示求出來的滿足要求的1~n的乙個排列。

4 16

3 9

3 1 2 4

1 3 2

各個測試點2s

不同測試點分數可能不同

建立乙個陣列b[i][j][k],表示楊輝三角第i行從第j個數第k小的數,比如第4行,1 3 3 1,則b[4][1][1]=1,b[4][1][2]=1;b[4][1][3]=3;b[4][2][1]=1;b[4][2][2]=3;b[4][2][3]=3

搜尋剪枝:每次搜尋時判斷剩餘的數和剩餘的楊輝數相乘的最小值和最大值,如果最小值加上當前和》t則剪枝,如果最大值加上當前和資料太弱了,可以找到大量的算不出來的資料比如 n=20 t=5904462  6143311

1 #include2 #include

3using

namespace

std;45

int n,t,a[25][25]=,b[25][25][25];6

structorder[25][25

],tr;

7bool over=0;8

9void search(int x,int sum,int ans,bool

vis)

1819

int min=0,max=0,d=1;20

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

21if(vis[i]==0

)22

23if(sum+min>t||sum+maxreturn;24

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

25if(vis[i]==0)26

3233}34

35int

main()

3645

4647

4849

for(int i=1;i<=20;++i)

50for(int j=1;j<=i;++j)

51for(int k=j+1;k<=i;++k)

52if(order[i][j].x>order[i][k].x)

53

54else

if(order[i][j].x==order[i][k].x&&(order[i][j].y>order[i][k].y))

55

5657

5859

for(int i=1;i<=20;++i)

60for(int j=1;j<=i;++j)

61for(int k=1;k<=i-j+1;++k)

6268

69while(cin>>n>>t)

70;

73bool vis[25]=;

74 search(1,0

,ans,vis);

7576}77

//system("pause");

78 }

上三角矩陣下三角矩陣

要求給定矩陣,輸出其上三角矩陣或下三角矩陣 源 如下 include include include include const int m 5 void proc int array m m void main printf n proc a printf result array is n fo...

python楊輝三角 楊輝三角I II

給定乙個非負整數 numrows,生成楊輝三角的前 numrows 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 5 輸出 1 1,1 1,2,1 1,3,3,1 1,4,6,4,1 可以一行一行錯位加,當然這裡提供更簡便的方法。任取一行描述 1,2,1 如何得到 1,3,3,1 ...

sicp練習1 12 帕斯卡三角(楊輝三角)

楊輝三角以前在學習c語言時候,用迴圈很容易實現。由於剛剛接觸函式式語言,遞迴和迭代方式實現迴圈還沒深入我心。下意思的想用鍊錶來實現,但發現自己對scheme的鍊錶操作太不熟悉,總會出現這樣那樣子的無法自我解釋的問題。最後參考了 dennis zane 的pascal實現,dennis zane 是把...