內(nèi)容教案成果1_第1頁(yè)
內(nèi)容教案成果1_第2頁(yè)
內(nèi)容教案成果1_第3頁(yè)
內(nèi)容教案成果1_第4頁(yè)
內(nèi)容教案成果1_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余21頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、問題描述SticksDescription George took sticks of the same length and cut them randomly until all parts became at most 50 units long. Now he wants to return sticks to the original state, but he forgot how many sticks he had originally and how long they were originally. 解題要求1. Time Limit, Memory Limit2. In

2、put3.OutputTime Limit:5S Memory Limit:10000KInputThe input file contains blocks of 2 lines. The first line contains the number of sticks parts after cutting. The second line contains the lengths of those parts separated by the space. The last line of the file contains zero.OutputThe output file cont

3、ains the smallest possible length of original sticks, one per line.基本思路從小到大,逐個(gè)嘗試可能的長(zhǎng)度。設(shè)已知的n根短棍的長(zhǎng)度分別是:l1,l2,ln現(xiàn)在的問題就是:要判斷這n根短棍是否可以組成m根長(zhǎng)為length的長(zhǎng)棍。這題和Dividing(1014)那題很像,從題意上可以把Dividing看成是此題的簡(jiǎn)化版本。然而仔細(xì)分析這兩題有很大不同,因此解法也是大相徑庭的。Dividing那題的數(shù)據(jù)總量可以達(dá)到20000,直接的深度優(yōu)先搜索是很難奏效的,所以我們的想法是如何有效的減少數(shù)據(jù)總量。而對(duì)于此題來說,雖然我不知道實(shí)際測(cè)試數(shù)

4、據(jù)的最大的數(shù)據(jù)量(sticks的總數(shù))是多少,但是我只用了一個(gè)長(zhǎng)為100的數(shù)組保存也沒有越界。說明總的數(shù)據(jù)量不超過100(注:要解這題要我覺得要使用深度優(yōu)先搜索,對(duì)于深度優(yōu)先搜索來說100已經(jīng)是很大的數(shù)了)。具體思路對(duì)于這個(gè)問題,可以有2種不同的解決方法:1.逐個(gè)使用l1,l2,ln來填充長(zhǎng)棍。2.逐個(gè)填充長(zhǎng)棍,填完一根長(zhǎng)棍,再填下一根。無論是哪一種解題思路,我們都可以“感覺到”如果有如下的關(guān)系成立l1=l2=ln 那么對(duì)于解題是十分有利的。事實(shí)也是如此,在此種情況下將會(huì)比較高效的排除不可能的情況。此題的實(shí)際測(cè)試結(jié)果也是如此,如果讀入數(shù)據(jù)后沒有排序,我所見過每種算法都會(huì)超時(shí)。第一種思路的程序框

5、架bool solve(k)/填第k根短棍 for(i=0;im;i+)if(lk+第i根長(zhǎng)棍已填的部分 m) ok = 1; printf(%dn, length); return; int i; for (i = 1;i = n;i+) if (!usedi) break; usedi = 1; search(x,sticki,i);/此步和我的第一個(gè)優(yōu)化類似 usedi = 0;void search(int num,int now,int next) if (ok) return; if (now = length) solve(num + 1); return; for (int i = next + 1;i = n;i+) if (!usedi) if(sticki + now = len) usedi = 1;search(num,now + sticki,i);usedi = 0; if (ok) return; /此步和我的第三個(gè)優(yōu)化類似 if (sticki = length - now) return; 以上的程序段來自與lowai,運(yùn)行時(shí)間是20ms。在這段程序中也使用了一些優(yōu)化,經(jīng)過實(shí)驗(yàn),在不加入其中任何一個(gè)優(yōu)化的情況下,計(jì)算結(jié)果都會(huì)超時(shí)。總結(jié)1.深度優(yōu)先搜索的順序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論