版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——分治算法例題
C語言分治算法例題
目錄
1031輸油管道問題2
解題思路2
程序代碼2
1032郵局選址5
解題思路5
程序源代碼5
1034集合劃分27
解題思路:7
程序源代碼:7
1033集合劃分9
解題思路9
程序源代碼9
C語言分治算法例題
1031輸油管道問題
解題思路
此題目可以分為兩個(gè)步驟:
1、找出主管道的位置;
2、根據(jù)主管道的位置,計(jì)算各個(gè)油井到主管道的長(zhǎng)度之和。
根據(jù)題意,設(shè)主管道貫穿東西,與y軸平行。而各個(gè)子油井則分布在主輸油管道的上下兩側(cè)。如下圖:
由上圖,其實(shí)只需要確定主管道的y坐標(biāo),而與各個(gè)子油井的x坐標(biāo)無關(guān)!根據(jù)猜測(cè),易知:主管道的y坐標(biāo)就是所有子油井y坐標(biāo)的中位數(shù)。(可以用平面幾何知識(shí)證明,略)
求中位數(shù)的方法可以用排序后取a[(left+right)/2],當(dāng)然更推薦用書上的線性時(shí)間選擇算法解決。記求得的主管道為ym,最終要輸出的結(jié)果只需要計(jì)算:
|yyi
i1nm|,輸出即可。
另外要提醒的是此題多Case。
程序代碼
#includestdio.h
#includestdlib.h
voidswap(inta,intb)
{
inttmp=a;
a=b;
b=tmp;
}
C語言分治算法例題
//本函數(shù)求arr[p:q]的一個(gè)劃分i,使arr[p:i-1]都小于arr[i],arr[i+1,q]都大于arr[i]
intpartition(int*arr,intp,intq)
{
intindex=p-1,start=p,base=arr[q];
for(;startq;start++)
{
if(arr[start]=base)
{
swap(arr[start],arr[++index]);
}
}
swap(arr[++index],arr[q]);
returnindex;
}
//快速排序
voidqsort(int*arr,intp,intq)
{
if(p=q)
{
intpos=partition(arr,p,q);
qsort(arr,p,pos-1);
qsort(arr,pos+1,q);
}
}
intarr[10001];
intmain()
{
intn;
//注意多case寫法
while(scanf(%d,n)!=EOF)
{
//讀取數(shù)據(jù)
for(inti=0;in;i++)
{
//讀取y
scanf(%d%d,arr[i],arr[i]);
}
//排序
qsort(arr,0,n-1);
//取中位數(shù)的下標(biāo)mid,然后計(jì)算距離
longlongsum=0;
intmid=arr[n/2];
C語言分治算法例題
}
for(inti=0;in;i++){sum+=abs(mid-arr[i]);}printf(%I64d\n,sum);}return0;
C語言分治算法例題
1032郵局選址
解題思路
此題和上一題十分類似,這次是要找出在居民點(diǎn)中郵局的最正確位置。很簡(jiǎn)單想到,這次不僅要確定y坐標(biāo),還要確定x坐標(biāo)。類似猜想可以知道,郵局最正確位置(xp,yp)應(yīng)當(dāng)為:
xp等于所有居民點(diǎn)x坐標(biāo)的中位數(shù);
yp等于所有居民點(diǎn)y坐標(biāo)的中位數(shù);
分別求中位數(shù)的過程和上題類似,不再陳述。最終的計(jì)算結(jié)果:要求距離之和,輸出|xixp||yiyp|。
i1n
程序源代碼
#includestdio.h
#includestdlib.h
#includealgorithm
usingnamespacestd;
intx[10000],y[10000];
intmain()
{
intn;
while(scanf(%d,n)!=EOF
)
C語言分治算法例題
}
{//讀取x和y坐標(biāo)for(inti=0;in;i++){scanf(%d%d,x[i],y[i]);}//調(diào)用STL中的排序算法,分別對(duì)x坐標(biāo)和y坐標(biāo)進(jìn)行排序sort(x,x+n);sort(y,y+n);//取x,y坐標(biāo)的中位數(shù)并計(jì)算距離intmidx=x[n/2];intmidy=y[n/2];longlongres=0;for(inti=0;in;i++){res+=abs(midx-x[i]);res+=abs(midy-y[i]);}//輸出結(jié)果printf(%I64d\n,res);}return0;
C語言分治算法例題
1034集合劃分2
解題思路:
遞推公式如下:
F(n,m)=m*F(n1,m)+F(n1,m1)
F(n,m)表示把n個(gè)元素的集合分為m個(gè)子集,有多少種分法。證明如下:
n個(gè)元素的集合可以劃分為F(n,m)個(gè)不同的由m個(gè)非空子集組成的集合。考慮3個(gè)元素的集合,可劃分為
①1個(gè)子集的集合:{{1,2,3}}
②2個(gè)子集的集合:{{1,2},{3}},{{1,3},{2}},{{2,3},{1}}③3個(gè)子集的集合:{{1},{2},{3}}
∴F(3,1)=1;F(3,2)=3;F(3,3)=1;
假使要求F(4,2)該怎么辦呢?
A.往①里添一個(gè)元素{4},得到{{1,2,3},{4}}
B.往②里的任意一個(gè)子集添一個(gè)4,得到
{{1,2,4},{3}},{{1,2},{3,4}},
{{1,3,4},{2}},{{1,3},{2,4}},
{{2,3,4},{1}},{{2,3},{1,4}}
∴F(4,2)=F(3,1)+2*F(3,2)=1+2*3=7
推廣,得F(n,m)=F(n-1,m-1)+m*F(n-1,m)
提醒:由于此題數(shù)據(jù)范圍比較大,需要用64位長(zhǎng)整型即__int64或者longlong。
程序源代碼:
#includestdio.h
//計(jì)算把含有n個(gè)元素的集合分割為m個(gè)子集,有多少種解決方案longlongdivide(intn,intm)
{
if(m==1||m==n)
{
return1;
}
else
{
returndivide(n-1,m-1)+m*divide(n-1,m);
}
C語言分治算法例題
}
intmain()
{
intn,m;
//多case輸入
while(scanf(%d%d,n,m)!=EOF)
{
printf(%I64d\n,divide(n,m));
}
return0;
}
C語言分治算法例題
1033集合劃分
解題思路
假定F(n,m)表示整數(shù)n的m劃分,則整數(shù)n的所有劃分是:F(n,m)。
m1n
提醒:
1)由于此題數(shù)據(jù)范圍比較大,需要用64位長(zhǎng)整型即__int64或者longlong。
2)假使n比較大的話,遞歸算法計(jì)算時(shí)間會(huì)比較長(zhǎng),最好用動(dòng)態(tài)規(guī)劃算法實(shí)現(xiàn)。程序源代碼
#includestdio.h
//計(jì)算把含有n個(gè)元素的集合分割為m個(gè)子集,有多少種解決方案longlongsubset(intn,intm)
{
if(n==m||m==1)
{
return1;
}
else
{
returnsubset(n-1,m-1)+m*subset(n-1,m);
}
}
intmain()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼源職業(yè)技術(shù)學(xué)院《建筑工業(yè)化與裝配式結(jié)構(gòu)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廊坊職業(yè)技術(shù)學(xué)院《計(jì)算機(jī)通信網(wǎng)絡(luò)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西水利職業(yè)學(xué)院《汽車輕量化技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 建東職業(yè)技術(shù)學(xué)院《法語二外》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖州學(xué)院《項(xiàng)目設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南國(guó)防工業(yè)職業(yè)技術(shù)學(xué)院《混凝土結(jié)構(gòu)基本原理A》2023-2024學(xué)年第一學(xué)期期末試卷
- 呼倫貝爾職業(yè)技術(shù)學(xué)院《數(shù)量分析方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 自貢職業(yè)技術(shù)學(xué)院《仿真實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 周口理工職業(yè)學(xué)院《生物化工設(shè)備》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶科創(chuàng)職業(yè)學(xué)院《網(wǎng)絡(luò)課程綜合》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘肅社火100首歌詞
- GB/T 2315-2000電力金具標(biāo)稱破壞載荷系列及連接型式尺寸
- 腹主動(dòng)脈瘤的護(hù)理查房
- 內(nèi)部往來轉(zhuǎn)賬通知單
- iatf16949應(yīng)急計(jì)劃評(píng)審報(bào)告
- 商業(yè)銀行高管問責(zé)制度
- 企業(yè)員工培訓(xùn)之風(fēng)險(xiǎn)管理與防范對(duì)策
- 食材配送后續(xù)服務(wù)方案
- 鑄造工廠設(shè)備管理(共21頁)
- 農(nóng)產(chǎn)品收購(gòu)臺(tái)賬(登記經(jīng)營(yíng)單位及個(gè)體經(jīng)營(yíng)者投售的農(nóng)產(chǎn)品
- 分紅保險(xiǎn)精算規(guī)定
評(píng)論
0/150
提交評(píng)論