炮兵陣地 POJ 1185

2022-06-10 13:18:08 字數 1034 閱讀 8811

原題鏈結

考察:狀壓dp

這個是acwing 1064. 小國王那道題的擴充套件

思路:這道題與小國王的區別在於前兩行影響當前行.並且這道題我們求的是炮的最大數量.有幾點必須說明:

不能效仿小國王開dp陣列f[i,i行狀態],如果這樣寫狀態轉移方程就是f[i,j] = f[i-2,k]+cnt[j]+cnt[k],列舉i行、i-1、i-2行狀態,當它們不在同一列且與地圖符合就遞推;看上去確實符合邏輯,但是注意這樣就不能保證i-1行能夠與i-3行匹配.如資料:4 1 p h p h這樣輸出就與答案不符. 但也不能寫成f[i,j] = f[i-1,k]+cnt[j].因為f[i-1,k]儲存的是i-1,i-2,i-3的最優解.而在第i行時,i-2行與f[i-1,k]的i-2行可能不是同一行.

答案最後是求最值,所以不要累加...

關於**為什麼不檢驗p與mp[i-2]:因為答案只會記錄到匹配的i、i-1行.也就是說不匹配的一直為0.更何況i-2行是先被計算的.

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;

7const

int n = 110,m = 11;8

char

s[n][m];

9int mp[n],n,m,f[2][1

<1

<10 vectorv;

11int getcnt(int

x)12

17void

change()

1831

if(ok) v.push_back(i);32}

33}34int

main()

3550

for(int i=0;i)

51for(int j=0;j1

][v[i]][v[j]],ans);

52 printf("

%d\n

",ans);

53return0;

54 }

炮兵陣地 POJ 1185

司令部的將軍們打算在nm的網格地圖上部署他們的炮兵部隊。乙個nm的地圖由n行m列組成,地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖中的灰色所...

poj 1185 炮兵陣地

題目鏈結 題意 在n m的網格地圖上部署炮兵部隊。地圖的每一格可能是山地 用 h 表示 也可能是平原 用 p 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖中的灰色所標識的平原上部署一支炮兵部隊,則圖中...

POJ 1185 炮兵陣地

include include include include include include include include include include include include include include define sz v int v size define rep i,n ...