動態規劃-狀壓DP(炮兵陣地)
P2704 炮兵陣地
題目描述
司令部的將軍們打算在NM的網格地圖上部署他們的炮兵部隊。一個NM的地圖由N行M列組成,地圖的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下圖。在每一格平原地形上最多可以布置一支炮兵部隊(山地上不能夠部署炮兵部隊);一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示:
如果在地圖中的灰色所標識的平原上部署一支炮兵部隊,則圖中的黑色的網格表示它能夠攻擊到的區域:沿橫向左右各兩格,沿縱向上下各兩格。圖上其它白色網格均攻擊不到。從圖上可見炮兵的攻擊範圍不受地形的影響。 現在,將軍們規劃如何部署炮兵部隊,在防止誤傷的前提下(保證任何兩支炮兵部隊之間不能互相攻擊,即任何一支炮兵部隊都不在其他支炮兵部隊的攻擊範圍內),在整個地圖區域內最多能夠擺放多少我軍的炮兵部隊。
第一行包含兩個由空格分割開的正整數,分別表示N和M;
接下來的N行,每一行含有連續的M個字符(‘P’或者‘H’),中間沒有空格。按順序表示地圖中每一行的數據。N≤100;M≤10。
5 4
PHPP
PPHH
PPPP
PHPP
PHHP
輸出
僅一行,包含一個整數K,表示最多能擺放的炮兵部隊的數量。
6
代碼
動態規劃-狀壓DP(炮兵陣地)
相關推薦
動態規劃-狀壓DP(炮兵陣地)
我軍 如何 tro 輸入 可見 php 正整數 接下來 一個 P2704 炮兵陣地 題目描述司令部的將軍們打算在NM的網格地圖上部署他們的炮兵部隊。一個NM的地圖由N行M列組成,地圖的每一格可能是山地(用“H” 表示),也可能是平原(用&ldquo
HDU 5067 Harry And Dig Machine(狀壓DP)(TSP問題)
++ pid log dig mem cpp struct article font 題目地址:pid=5067">HDU 5067 經典的TSP旅行商問題模型。狀壓DP。 先分別預處理出來每兩個石子堆的距離。然後將題目轉化成10個城市每一個城市至少經過一次的最
動態規劃---狀壓dp2
mes getc 今天 png 附加 cor ons image namespace 今天模擬,狀壓dp又沒寫出來。。。還是不會啊,所以今天搞一下這個狀壓dp。這裏有一道狀壓dp的板子題: Corn Fields 就是一道很簡單的狀壓裸題,但是要每次用一個二進制數表示一
BZOJ4000 TJOI2015棋盤(狀壓dp+矩陣快速冪)
狀壓dp div out ons cstring char tdi getchar esp 顯然每一行棋子的某種放法是否合法只與上一行有關,狀壓起來即可。然後n稍微有點大,矩陣快速冪即可。 #include<iostream> #include<c
hdu 1438 鑰匙計數之一狀壓dp(有地方不明白)
Problem Description 一把鎖匙有N個槽,槽深為1,2,3,4。每鎖匙至少有3個不同的深度且至少有1對相連的槽其深度之差為3。求這樣的鎖匙的總數。 Input 本題無輸入 Output 對N>=2且N<=31,輸出滿足要求的鎖匙的總數。
4640 Island and study-sister (狀壓DP+揹包+最短路)
#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #def
HDU5823(2016多校第八場)——color II (狀壓dp,獨立集)
First line contains an integer t. Then t testcases follow. In each testcase: First line contains an integer n. Next n lines each contains a string consis
TSP問題(狀壓DP+Floyd解決方式)
目標演算法:狀態壓縮DP+Floyd 應用範圍:TSP #include<cstdio> #include<iostream> #include<algorithm&
HDU - 6125: Free from square (狀壓DP+分組背包)
素數 scanf style 多少 tor mod def c++ n) problem:給定N,K。表示你有數1到N,讓你最多選擇K個數,問有多少種方案,使得選擇的數的乘積無平方因子數。N,K<500; solution:顯然可以狀壓DP做,但是500以內的素數還
動態規劃演算法學習總結(帶案例)
【動規演算法學習總結】 首先,遇到動態規劃問題要找到三個重要元素: 1.最優子結構 2.邊界 3.狀態轉移方程 【最優子結構】 通俗來說,就是具有規律性的結果的獲取方式。 如上樓梯問題
【動態規劃】機器分配 (ssl 1639)
機 器 分 配
【動態規劃】石子合併 (ssl 2863)
石 子 合 並
【動態規劃】大廳安排 (ssl 1212)
大 廳 安 排
【動態規劃】拔河比賽 (ssl 1638)
拔 河 比 賽
動態規劃之硬幣兌換(Coin Change)
已知N,如果我們想要換N分,而且每種S = { S1, S2, .. , Sm} 價值的硬幣是不限數量的,那麼我們有多少種方法來兌換?硬幣的順序是無所謂的。 例如:N = 4,S = {1,2,3},,因此有四種答案: {1,1,1,1},{1,1,2},
動態規劃之揹包問題(C語言)
動態規劃 動態規劃(英語:Dynamic programming,簡稱DP)是一種通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。 動態規劃常常適用於有重疊子問題和最優子結構性質的問題 動態規劃思想大致上為:若要解一個給定問題,我們需要解其不同
(狀壓dp)NOI 2001(POJ 1185) 炮兵陣地
上下 數據 enter 能夠 sam src max spa 參加 司令部的將軍們打算在N*M的網格地圖上部署他們的炮兵部隊。一個N*M的地圖由N行M列組成,地圖的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下圖。在每一格平原地形上最多可以布置一支炮
[luoguP2704] 炮兵陣地(狀壓DP)
pro 狀態 blank show char %d har void href 傳送門 可以事先把每一行的所有狀態處理出來,發現每一行的狀態數最多不超過60個 f[i][j][k]表示前i行,第i行為狀態j,第i-1行為狀態k的最優解 #include
【NOI2001】 炮兵陣地 (狀壓dp)
ron 很多 == 處理 gist i++ ostream push 計算 傳送門 Luogu 題目描述 司令部的將軍們打算在NM的網格地圖上部署他們的炮兵部隊。一個NM的地圖由N行M列組成,地圖的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下圖。在
【POJ】1185 炮兵陣地(狀壓dp)
amp times str tin pac 答案 include sin 所有 題目 傳送門:QWQ 分析 看到$ M<=10 $考慮狀壓。 然後把每行都壓一下,那麽每個狀態相關的就是上一行和上上行的狀態。 然後枚舉。 然後復雜度最壞是$