原创 練習三 1021

概述:有六種物品,每種物品對應的價值爲1~6,給定每種物品的個數,切不可分割,問能否把這堆物品分爲等價值的兩份。 思路:多重揹包,計算過程比較複雜,所以要優化一下,先把總價值爲奇數的組排除掉(因爲奇數不可能分爲等價值的兩份),然後再套模板

原创 練習三 1001

概述:求最大字段和,d[i]表示已 i 結尾(字段和中包含 i )在 a[1..i] 上的最大和。 思路:利用遞推公式d[i]=(d[i-1]+a[i]>a[i])?d[i-1]+a[i]:a[i];max = {d[i],1<=i<=

原创 練習三 1022

概述:小偷偷東西,給出他被抓的機率,求他能偷到的最大財富。 思路:既然是最大財富,那就是當他正好被抓到時,錢最多,在將被抓概率轉化爲存活概率,利用概率相乘原理,轉化爲01揹包問題(怎麼又是01揹包)即可。 感想:無。 #include <

原创 練習三 1011

概述:有一隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請編程計算蜜蜂從蜂房a爬到蜂房b的可能路線數。 思路:典型的斐波拉契數列問題,相距N步與相距N-1步和相距N-2步有關,f(n)=f(n-1)+f(n-2),沒啥好說的。 感

原创 練習三 1002

概述:給出兩個字符串,求出它們最長的公共部分的長度。 思路:這個題用到了LCS(最大公共序列)算法,老師沒有講過,於是我查了一下,思路是這樣的,將兩個序列分別比作矩陣的行和列,如下圖 矩陣初始都置爲0,一旦一個格的行和列相等,就把對應格的

原创 練習三 1018

概述:給出小豬錢罐的重量和裝滿錢後的重量,然後是幾組數據,每組數據包括每種錢幣的價值與重量,要求出重量最少能裝滿錢罐時的最大價值。 思路:完全揹包問題, 感想:無。 #include <iostream> #include <cstrin

原创 練習四 1005

概述:省政府“暢通工程”的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程序,計算

原创 練習四 1002

概述:在平面座標系中給你一些孤立的點,求把這些點聯繫起來的最小路程。 思路:這是經典最小生成樹問題的一個變種,因爲點的座標是Double型的,所以比較難像其他題一樣用位置表示點的根節點,所以,要從新給每個輸入的點分配一個ID,然後就轉化爲

原创 練習三 1015

概述:給出一個十進制整數,求二進制形式。 思路:水水水水水水水水水水水水題。 感想:水水水水水水水水水水水水 #include<iostream> #include<vector> using namespace std; int m

原创 練習四 1001

概述:給你一些城鎮,以及各個鎮之間的距離,現在要修建道路,把這些鎮子穿起來,已知一些鎮子之間已經有了道路(即不用再修了),現在求施工的最短路徑。 思路:這是最小生成樹問題,我採用的是kruskal算法。 感想:“一些鎮子之間已經有了道路”

原创 練習三 1024

概述:首先給出物品數量和手中資金,人後每樣物品給出價格,需要購買時手中至少需要多少資金,還有物品本身的價值,要求求出最大資金。 思路:一定要按q-p排序,不要按價值排序。 感想:無。 #include <stdio.h> #include

原创 練習三 1023

概述:Speakless很早就想出國,現在他已經考完了所有需要的考試,準備了所有要準備的材料,於是,便需要去申請學校了。要申請國外的任何大學,你都要交納一定的申請費用,這可是很驚人的。Speakless沒有多少錢,總共只攢了n萬美元。他將

原创 練習三 1019

概述:給出每個物體的價值和物體的數量,如何分使得A,B所得價值最接近並且A的價值不能小於B 思路:將價值的總和平分,就可以轉化爲01揹包問題,狀態方程爲 dp[j] = max(dp[j],dp[j-val[i]]+val[i]); 感

原创 練習四 1004

概述:給你一些鎮子,和鎮子之間的距離,現在要修一條路,把所有鎮子連起來,求路的最短距離。 思路:最小生成樹問題,我採用的還是KRUSKAL是第一題的簡化版,詳情請看第一題。 感想:刷了第一題,再看這個題,感覺好簡單。 #include <

原创 練習三 1005

概述:給定一塊磚的 長寬高,讓你疊金字塔,下面磚的表面積必須大於上面的,求能疊到的最高高度。 思路:先將給定的所有的磚分成三種,這樣的話,一塊磚就有三種形態,然後將所有的排序,然後挑選,最後將所選的高加到一起即可。 感想:題意不太好理解。