繼續昨天的練習,今天又做了題單裡的一些題,選了一道比較有意思的題作為本文內容。
題目:挖地雷
題目內容:
在乙個地圖上有nn個地窖(n \le 20)(n≤20),每個地窖中埋有一定數量的地雷。同時,給出地窖之間的連線路徑。當地窖及其連線的資料給出之後,某人可以從任一處開始挖地雷,然後可以沿著指出的連線往下挖(僅能選擇一條路徑),當無連線時挖地雷工作結束。設計乙個挖地雷的方案,使某人能挖到最多的地雷。
輸入格式:
有若干行。
第1行只有乙個數字,表示地窖的個數n。
第2行有n個數,分別表示每個地窖中的地雷個數。
第3行至第n+1行表示地窖之間的連線情況:
第3行有n-1個數(00或11),表示第乙個地窖至第2個、第3個、…、第n個地窖有否路徑連線。如第3行為11000…0,則表示第1個地窖至第2個地窖有路徑,至第3個地窖有路徑,至第4個地窖、第5個、…、第n個地窖沒有路徑。
第4行有n-2個數,表示第二個地窖至第3個、第4個、…、第n個地窖有否路徑連線。
… …第n+1行有1個數,表示第n-1個地窖至第n個地窖有否路徑連線。(為0表示沒有路徑,為1表示有路徑)。
輸出格式:
有兩行,第一行表示挖得最多地雷時的挖地雷的順序,各地窖序號間以乙個空格分隔,不得有多餘的空格。第二行只有乙個數,表示能挖到的最多地雷數。
輸入輸出樣例:輸入5
10 8 4 7 6
1 1 1 0
0 0 0
1 11
輸出1 3 4 5
27解題過程:
每個地窖的屬性比較多,所以用了乙個結構體來儲存,minenum表示該地窖藏得地雷數目,minemax表示通往當前地窖的地雷數和最大的那條路的地雷數(算上本身),pre是在地雷數最多的那條路該結點的前驅結點,link儲存通往該地窖的所有前驅結點。
struct
cellar[
100]
;
在通往當前地窖的地雷數和最大的那條路的地雷數 與 前乙個地窖的dp值 做選擇,這裡順便還儲存了前驅結點,方便之後輸出路徑,**如下:
voiddp(
)}cellar[i]
.minemax +
= cellar[i]
.minenum;
cellar[i]
.minedp =
max(cellar[i]
.minemax,cellar[i-1]
.minedp);}
}
void
showway
(int x)
else
showway
(cellar[x]
.pre)
; cout << x <<
" ";
}
全部**:
#include
using
namespace std;
//通往當前地窖的地雷數和最大的那條路的地雷數 與 前乙個地窖的dp值 做選擇
struct
cellar[
100]
;int cellarnum;
void
init()
for(
int i=
1;i < cellarnum;i++)}
cellar[1]
.minedp = cellar[1]
.minenum;
cellar[1]
.minemax = cellar[1]
.minenum;
cellar[1]
.pre =0;
}void
showway
(int x)
else
showway
(cellar[x]
.pre)
; cout << x <<
" ";
}voiddp(
)}cellar[i]
.minemax +
= cellar[i]
.minenum;
cellar[i]
.minedp =
max(cellar[i]
.minemax,cellar[i-1]
.minedp);}
}int
main()
} cout << cellar[cellarnum]
.minedp;
}
心得:
在題解裡發現的用遞迴來輸出路徑的方法很有意思,很多題目應該都可以用到。
動態規劃的引入1
之前學習過一段時間的動態規劃,但掌握的不夠牢固,實際做題時還是不能靈活的運用,所以打算在寒假對這部分知識進行學習和鞏固,按照洛谷的提單分為五個部分進行學習 1.動態規劃的引入 2.線性狀態動態規劃 3.區間與環形動態規劃 4.樹與圖上的動態規劃 5.狀態壓縮動態規劃 本文題目選自第一部分的練習內容 ...
動態規劃2
動態規劃是研究一類最優化問題的方法,在經濟 工程技術 企業管理 工農業生產及軍事等領域中都有廣泛的應用。近年來,在acm icpc中,使用動態規劃 或部分應用動態規劃思維 求解的題不僅常見,而且形式也多種多樣。而在與此相近的各類資訊學競賽中,應用動態規劃解題已經成為一種趨勢,這和動態規劃的優勢不無關...
動態規劃(2)
題目輸入格式 第1行 兩個數字r,c 1 r,c 100 表示矩陣的行列。第2.r 1行 每行c個數,表示這個矩陣。輸出格式 僅一行 輸出1個整數,表示可以滑行的最大長度。樣例輸入 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 ...