專題I E個人解題報告 DFS

2021-10-25 13:07:57 字數 1890 閱讀 1774

i_e題(dfs)poj-1011 sticks

uva-307 sticks

是的我又跑去學遞迴了qaq

這個題最好到uva-307去交題 (好像是說poj-1011的資料太水)

題意

喬治拿了相同長度的木棍,隨機切開,直到所有零件的長度最大為50個單位。 現在,他想將木棍恢復到原始狀態,但是他忘記了原來擁有多少木棍以及它們原本有多長。 請幫助他,設計乙個程式,計算出那些棍子的可能的原始最小長度。 所有以單位表示的長度都是大於零的整數。

輸入

輸入包含2行。 第一行包含切割後的木棍零件數量,最多為64個木棍。 第二行包含被空格隔開的那些部分的長度。 檔案的最後一行包含零。

輸出

輸出應包含原始木棍的最小長度,每行一根。

sample input

95 2 1 5 2 1 5 2 1

41 2 3 4

0sample output65

題意:·····恢復到原來的多根相同的木棍(或只有一根),求原來的木棍長度的最小值。

分析:

設 切開後木棍所有長度 為乙個陣列 a ,所有的長度和為sum 。(此後的 每一組 表示的是 原狀態的每一根木棍的長度 )

原狀態的木棍長度只可能是[陣列中的最大值,sum]之間能整除sum的數,求最小值就從 這些能整除sum的 的第乙個數開始 依次判斷該長度x是否滿足條件 如滿足則原始長度的最小值就是x

(此處滿足條件就是:恰好 (即所有木棍都用組合完了) 構成了 num(num=sum/x) 根長度為x的木棍)

第一步:將所給資料降序排序

第二步:構造dfs函式判斷長度x是否滿足條件

dfs函式中提前結束返回0 的情況:( 以下的滿足條件均表示: 當前組 的總長度 為 x)

對於 當前組 滿足條件 但是 下一組 不滿足條件。

對於 當前組 不滿足條件:對於 當前組 第乙個(其為該組的最長的) 不滿足條件

ac**

//注意:在uva上提交的話 不要用c++的輸入輸出 用c的輸入輸出才沒超時;poj的話沒試過

//#include //poj上用這個我不知道為什麼編譯錯誤

#include

#include

#include

//memset()標頭檔案

using

namespace std;

int n,sum,x,num;

int a[70]

,v[70];

bool

cmp(

int&a,

int&b)

bool

dfs(

int cnt,

int len,

int cntnum)

else

if(len+a[i]

}return0;

//列舉所有木棍都沒得到解,返回0

}int

main()

sort

(a,a+n,cmp)

;for

(x=a[0]

;x<=sum;x++)}

}printf

("%d\n"

,x);

}return0;

}

專題I K個人解題報告 三分

i題 hdu 3714 分析 求f x max si x 畫圖分析易知f x 一定是乙個下凸的影象,三分 這個題的精度要注意,還不會精度到底要怎麼搞,我一般都取1e 7,這次wa了,取了1e 10過了。include using namespace std 把f x max s x 表示出來 int...

動態規劃專題 解題報告 A

乙個經典的貨郎擔問題,加上17的範圍限制各種明示狀態壓縮,用二進位制來表示走過哪幾個城市,我們可以開乙個二維陣列dp i j 表示走過了i的城市,最後在j城市停留的距離。預處理一遍每個城市間的距離,算出dis i j 到dp i j 的狀態可以由 1 1 j k 轉移過來,比較距離儲存最優值就行,然...

動態規劃專題 解題報告 M

別的我不說了,良心題解先吹一波好吧。最重要的使這一段 假如第一位4,第二位7,三四位就可以隨便取了。設這種狀態為 2,2 意思為前兩位已經匹配上了4750的第二位。則用dp 2 2 表示 dp 100010 5 一共5 1e5種狀態 那麼 2,2 就有10種選擇 0 9 會轉移1次到 3,3 選5 ...