紀中生活 1 3

2022-06-01 18:42:08 字數 2739 閱讀 1662

charles和sunny在玩乙個簡單的遊戲。若給出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和sunny玩的遊戲便是,charles給出n和t,sunny在盡可能短的時間內,找到能通過上述操作得到t且字典序最小的1~n的排列。(sunny大聲說:「what  an easy game!」,接著幾下就給出了解),charles覺得沒意思,就想和你玩,當然,你可以用一種叫做「電子計算機」的東西幫你。

輸入:

本題有多組資料,對於每組資料:一行兩個整數n(0輸出:

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

樣例輸入:

4 16

3 9

0 0

樣例輸出:

3 1 2 4

1 3 2

對樣例解釋:

開始排列:3、1、2、4

第一次操作:3+1=4  1+2=3  2+4=6

得到:4、3、6

第二次得到:7、9

最後就是:16

題目要求1-n的乙個排列a1,a2…an使得c(n-1,0)*a1+c(n-1,1)*a2+….+c(n-1,n-1)*an=t-------1式,(有點像楊輝三角)

方法很好確定,先把c(n-1,i)求出來,然後只要把每乙個位上的數確定好就可以了,所以採用深度優先搜尋的方法。

方法:直接搜,用dfs(x,y)表示當前將要確定第x個位置上數,已經確定的和為y,把每種情況都搜出來,然後在遞迴出口的位置判斷1式是否成立,不過很可惜,這種方法得不到分(超時);

剪枝一:加乙個小小的優化,就是在確定第x個數時,保證新求出來的y不能大於t,加上這個優化後,可以得40分;

剪枝二:由於c(n-1,i)=c(n-1,n-1-i),具有對稱性,題目又要求最小字典序列,所以在列舉時當x>n div 2 時,要保證a[x]>a[n+1-x],這樣程式速度會提高,但是該題還是只能得40分;

剪枝三:當列舉到第x個數時,剩餘的n-x個數,與剩餘的n-x個係數一一對應,讓大數和大係數相乘,小數和小係數相乘可以得到最大值,讓大數和小係數相乘,小數和大係數相乘可以得到最小值,如果剩餘的值不在這個範圍內,就不要搜下去,這樣可以大大優化,拿樣例舉例來說:

n=4,t=16。

當列舉a[1]=1時,剩餘16-1*1=15,剩餘的未放置的數為2,3,4,剩餘的係數為1,3,3,這樣最大值為4*3+3*3+2*1=23,最小值為4*1+3*3+2*3=19,都超過了15,所以第乙個數不能選1。

其實就是dfs+一堆優化。噁心,還不能保證是否過。

1 #include2 #include3 #include4 #include5 #include6

#define n 55

7using

namespace

std;

8int

f[n][n];

9int

q[n],t[n],x[n];

10int n=1,m=1;11

bool

b;12

bool cmp(int x,int

y) 15

void

pre() 22}

2324}25

bool pd(int dep,int

s) 30 sort(x,x+n-dep+1

,cmp);

31int j=0;32

for (int i=n; i>=1; --i) 37}

38if (an41 an=s;

42 j=0;43

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

4950

if (an>m)

53return

false;54

}55void dfs(int dep,int

s) 62 printf("\n"

);63 b=1;64

}65return;66

}67if (s>m)

70if (pd(dep+1

,s))

73if (dep>n/2 && q[dep]1

]) 76

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

84}85int

main()

95return0;

96 }

這種題優化不能保證過,但你也沒有辦法。

這道題也是看了題解才過的。

紀中生活 1 0

這是第一次寫部落格,前幾天還不想寫。普及組模擬 暴力搜尋每乙個數,而且答案最大是2,但有多個資料防打表。capacity 乙個x電容併聯後變成x 1會變大,串聯後變成x x 1 會變小,我們最終要把需要的電容變成1,那麼我們就反著推,如果當前電容大於1,最後一次操作就是併聯,併聯前是x 1 即 a ...

人在自然中生活

江南可採蓮,蓮葉何田田。是否你總幻想著乘一葉小楫輕舟,在半人高的荷葉中穿行。讓雙手優雅地撫過帶著露珠的蓮蓬,深吸一口,那股清香便已讓你沉醉。明月松間照,清泉石上流。是否你總嚮往著能在乙個寧靜的月夜,獨自漫步於松林中,泉水叮咚是內心的旋律,詩情畫意的時間在此刻為你停留。而殘酷的現實總將你從夢想中喚醒,...

日常生活中生薑的用處

size medium 頻嚼生薑,或用生薑研汁服,可以 嘔吐。乘車前喝些生薑汁水,或切一片生薑貼在手腕內側腕後橫紋2寸處,用紗布包好,能防 止暈車。在乘車途中含幾片生薑,有助於抑制暈車嘔吐。將生薑搗碎與紅糖混合,衝薑糖水熱飲,可治妊娠嘔吐或痛經。用鮮生薑汁半杯,蜜2匙,加水調勻飲服,可治脾胃虛弱不能...