ps:題是別的地方copy過來的,**是自己的
第一題:
}第二題:
注:19上機也出了類似的題,本身這種題屬於計算機影象處理,我本科沒做過這方向,不是很了解,個人感覺弄懂對於考試意義不大,所以我也不深究了。
第三題:
瓜農王大爺去年種西瓜賺了不少錢。看到收入不錯,今年他又重新開闢了n個西瓜地。
為了能給他的n個西瓜地順利的澆上水,對於每個西瓜地他可以選擇在本地打井,也可以修管道從另乙個瓜地(這個瓜地可能打了井;也可能沒打井,他的水也是從其他瓜地引來的)將水引過來。
當然打井和修管道的費用有差別。已知在第i個西瓜地打井需要耗費wi元,在第i、j個西瓜地之間修管道需要耗費pi,j元。
現在的問題是:王大爺要想使所有瓜地都被澆上水,至少需要花費多少錢(打井與修管道的費用和)?
由於瓜地較多,王大爺無法選擇在哪些(個)瓜地打井,哪些西瓜地之間修管道。
請你程式設計幫王大爺做出決策,求出最小費用。
(1<=n<=300,1<=wi<=100000;pi,i=0,1<=pi,j=pj,i<=100000)
input
第1行,乙個正整數n,代表西瓜地的數量。
以下n行,依次給出整數w1..wn(每塊西瓜地的打井費用)。
緊接著是乙個n*n的整數矩陣,矩陣的第i行第j列的數代表pi,j(兩塊西瓜地之間建立管道的費用)。每行的兩個數之間有乙個空格隔開。
654
43120
0 2 2 2 9 9
2 0 3 3 9 9
2 3 0 4 9 9
2 3 4 0 9 9
9 9 9 9 0 9
9 9 9 9 9 0
output
19
在第4個瓜地打井(費用為3),然後將第2,3,4個瓜地與第1個瓜地間修管道(費用分別是2,2,2),這樣水可以經過管道從4流向1,然後經1再流向2和3;
在第5個瓜地打井(費用為1),5和6之間修管道(費用為9)。
這樣一共打了2口井,修了4條管道,能給所有的6個瓜地澆水,費用是:3+2+2+2+1+9=19。
//最小生成樹
/* 這裡用了個巧辦法。對於最典型的最小生成樹來說,我一般用並查集以及邊集來解決,並查集用來把通過最小邊連起來的點進行合集,邊集用來遍歷最小邊,點集的話用樹的雙親表示法來表示,以便於表示自己的根結點。這題就是多了乙個井的代價,巧辦法就是,我可以把井也當做乙個點,點的權值就相當於這個多出來的點到打井結點的路徑長度,這樣就把所有點權值轉化為邊權值,就是最小生成樹的經典演算法了。
eg:看例子,有六個點,點權值分別為5,4,4,3,1,20,這時我們新加乙個點,這個點到所有結點路徑權值為點權值,加入我們的邊集,相當於在原來基礎上,又新加了6條邊,這樣就可以正常實現kruskal演算法。
*/#include#includeusing namespace std;
int tree[100];//雙親表示法的樹,存放自己的雙親結點編號,-1則自身為根,初始所有結點都是-1
struct point;
struct edge;
int find(int x)
else}/*
不加入路徑壓縮,好理解一些
int find(int x)
*/bool cmp(edge a,edge b)
int main()
edge e[1000];
int enum = 0;
int tmp;
for(int i = 1;i <= num;i++)
else if(i > j)
scanf("%d",&(e + enum)->cost);
(e + enum)->from = i;
(e + enum)->to = j;
enum++;
} }//點權值轉化為邊權值,放入邊集
for(int i = 0;i < pnum;i++)
sort(e,e + enum,cmp); //邊權值排序
for(int i = 0;i < num + 1;i++)
//基於kruskal的最小生成樹演算法
int sum = 0;
for(int i = 0;i < enum;i++) }
printf("%d\n",sum);
return 0;
}
杭電2011複試上機真題
ps 題是別的地方copy過來的,是自己的 第一題 輸入三個正整數a b c。判斷這三個數能不能構成乙個三角形。組成三角形的三條邊a,b,c需同時滿足條件 a b c a c b b c a 而實際上只要最長邊小於其餘兩邊之和即可 include includeusing namespace std...
杭電2012複試上機真題
ps 題是別的地方copy過來的,是自己的 第一題 輸入乙個十進位制的數,把它轉成十六進製制。leetcode 168 171 26進製轉換成10進製 這裡我輸入int輸出char include 二進位制 十六進製制 0 0 16 10 256 100 int main while scanf d...
杭電2016複試上機真題
ps 題是別的地方copy過來的,是自己的 第一題 判斷乙個數n是否是素數,是的話輸出 yes 否則輸出 no 素數 除了1和自身以外,沒辦法被其它自然數整除的數 即質數,0和1不在討論範疇內 輸入 1000000007 100 輸出 yes no include includeint main i...