深搜(2) 尋路 蛋糕

2021-08-24 17:58:14 字數 2413 閱讀 5784

#include 

#include

#include

#include

using

namespace

std;

struct rode

;int minlen=1

<<30,tallen,talcost;//當前最優路徑長度,正在走的路的長度,花銷

vector

> cityway(105);//cityway[i]是從i有路連線到的城市集合,二維陣列

int visited[105];//判重標記,visited[i]=ture,表示i已經走過

int minl[105][10005];//minl[i][j]表示從1到i的,花銷為j的最短路長度

int k,n,r;

void dfs(int s)//從s開始想n行走

for (int i=0;iint d=cityway[s][i].d;//s有路連到d

if(!visited[d])

}}int main()

for (int i=0;i<105;i++)

memset(visited,0,sizeof(visited));//標誌清零

tallen=0; talcost=0;

minlen=1

<<30;

visited[1]=1;//第乙個走過

dfs(1);

if(minlen<(1

<<30))//若改變了,比最大值小

cout

cout

<<"-1"

0;}

生日蛋糕 (poj1190)

description

7月17日是mr.w的生日,acm-thu為此要製作乙個體積為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外,以上所有資料皆為正整數)

input

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

output

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

sample input

100

2 sample output

68 hint

圓柱公式

體積v = πr2h

側面積a』 = 2πrh

底面積a = πr2

剪枝 剪枝1:搭建過程中發現已建好的面積已經不小於目前求得的最優表面

積,或者預見到搭完後面積一定會不小於目前最優表面積,則停止搭建

(最優性剪枝)

剪枝2:搭建過程中預見到再往上搭,高度已經無法安排,或者半徑已

經無法安排,則停止搭建(可行性剪枝)

剪枝3:搭建過程中發現還沒搭的那些層的體積,一定會超過還缺的體

積,則停止搭建(可行性剪枝)

剪枝4:搭建過程中發現還沒搭的那些層的體積,最大也到不了還缺的

體積,則停止搭建(可行性剪枝)

#include 

#include

#include

#include

using

namespace

std;

int n,m;

int area;//正在搭建的面積

int minarea=1

<<30;//最優表面積

int minv[25];//minv[i],i層蛋糕最少的體積

int mina[25];//mina[i]i層蛋糕最少側面積

int maxf(int n,int r,int h)

void dfs(int v,int n,int r,int h)

}if (v<=0) return ;//體積不存在

if(hreturn;//最大半徑,高度比層數小(最小半徑高度)

if(minv[n]>v) return ;//當前體積小於最小體積

if(mina[n]+area>=minarea) return ;//當前面積比最小面積要大,剪枝

if(maxf(n,r,h)return ;//當前最大體積比要求的小

for (int rr=r;rr>=n;rr--)

}}int main()

if (minv[m]>n)

cout

<<0

網路尋路 深搜

問題描述 x 國的乙個網路使用若干條線路連線若干個節點。節點間的通訊是雙向的。某重要資料報,為了安全起見,必須恰好被 兩次到達目的地。該包可能在任意乙個節點產生,我們需要知道該網路中一共有多少種不同的 路徑。源位址和目標位址可以相同,但中間節點必須不同。如下圖所示的網路。1 2 3 1 是允許的 1...

深搜Dfs遍歷節點以及尋路

深搜遍歷從起點出發能走的所有節點 對於乙個節點,只要發現了沒走過的點就走到它,如果有多個點可走就任選乙個 遞迴呼叫 由於是從起點開始遍歷,因此遍歷過程也是產生路徑的過程 因此深搜遍歷是有路徑資訊的 單純的根據資料結構遍歷所有點是沒有路徑資訊的 dfs v 深搜遍歷圖上所有節點,注意區分僅僅呼叫dfs...

深搜剪枝 生日蛋糕

時間限制 1 sec 記憶體限制 128 mb 提交 14 解決 8 提交 狀態 討論版 命題人 add cy 7月17日是mr.w的生日,acm thu為此要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為ri,高度為hi的圓柱。當i m時,要求r...