Syins寫的dfs例題 生日蛋糕

2021-10-01 06:47:26 字數 1101 閱讀 3685

時間限制: 1 sec

記憶體限制: 128 mb二月二十九日是ykh的生日,acm-hlju為此要製作乙個體積為nπ的m層生日蛋糕,每層都是乙個圓柱體。

設從下往上數第i(1 <= i <= m)層蛋糕是半徑為ri, 高度為hi的圓柱。當i < m時,要求ri > ri+1且hi > hi+1。

由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面(最下一層的下底面除外)的面積q最小。

令q = sπ

請程式設計對給出的n和m,找出蛋糕的製作方案(適當的ri和hi的值),使s最小。

(除q外,以上所有資料皆為正整數)

有兩行,第一行為n(n <= 20000),表示待製作的蛋糕的體積為nπ;第二行為m(m <= 20),表示蛋糕的層數為m。

僅一行,是乙個正整數s(若無解則s = 0)。

1002

68一看就知道可用dfs,時限是1秒,tle 的可能很大

所以要考慮折枝

1:如果當前體積加上剩餘的最小體積大於n那麼返回

2:如果當前表面積大於之前得到的最小表面積那麼返回

3:如果當前體積加上剩下的最大體積也小於n,那麼返回

可以試一下資料:

10000

14如果沒有卡時間,一般就不會tle了;

#include

#include

using

namespace std;

int n,m,jg;

void

dfs(

int s,

int lr,

int lh,

int sumv,

int p)

;//s是當前已經好了的層數(從下往上),lr,lh分別是上一層的半徑和高度,sumv是現在的體積和,p是現在的表面積;

intmain()

return0;

}void

dfs(

int s,

int lr,

int lh,

int sumv,

int p)

for(

int i=lr-

1;i>=m-s;i--)}

}

Syins寫的疊筐

time limit1000 ms memory limit32768 kb 需要的時候,就把乙個個大小差一圈的筐疊上去,使得從上往下看時,邊筐花色交錯。這個工作現在要讓計算機來完成,得看你的了。輸入是乙個個的三元組,分別是,外筐尺寸n n為滿足0輸出疊在一起的筐圖案,中心花色與外筐花色字元從內層起...

Syins寫的歸併排序

歸併排序使用了分治思想 對乙個陣列排序,先將陣列分成左邊和右邊兩個子塊,然後繼續分子塊到乙個子塊只包含乙個數再返回 voidst int a,int lo,int hi 再通過mg函式將子塊有序合併,這裡採用的是有序數列的合併思想 voidmg int a,int lo,int mi,int hi ...

Syins寫的棧和佇列

棧 棧可以理解為有入口沒有出口而且僅容一人通過的山洞,先進入的被壓在山洞底,而後進的在山洞口處,所以後進先出 為了演示方便寫入了選單 voidz int a system pause voidzr int a,int l,int b voidzc int a,int l voidsc int a,i...