23 7每日一題acm

2021-08-21 16:24:58 字數 1631 閱讀 4579

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

如果在地圖中的灰色所標識的平原上部署一支炮兵部隊,則圖中的黑色的網格表示它能夠攻擊到的區域:沿橫向左右各兩格,沿縱向上下各兩格。圖上其它白色網格均攻擊不到。從圖上可見炮兵的攻擊範圍不受地形的影響。 

現在,將軍們規劃如何部署炮兵部隊,在防止誤傷的前提下(保證任何兩支炮兵部隊之間不能互相攻擊,即任何一支炮兵部隊都不在其他支炮兵部隊的攻擊範圍內),在整個地圖區域內最多能夠擺放多少我軍的炮兵部隊。 

輸入描述

第一行包含兩個由空格分割開的正整數,分別表示n和m; 

接下來的n行,每一行含有連續的m個字元('p'或者'h'),中間沒有空格。按順序表示地圖中每一

輸出描述

僅一行,包含乙個整數k,表示最多能擺放的炮兵部隊的數量。

輸入例子

5 4

phpp

pphh

pppp

phpp

phhp

輸出例子

6
**如下:

#include #include #include #define max(a,b) (a)>(b)?(a):(b)

using namespace std;

int dp[105][65][65]; //d[i][j][k]: 「第i行狀態是s[j],第i-1行狀態是s[k]」的

int s[105]; //一行的狀態選擇s[0], s[1], ... , s[k-1]

int n,m; //n行×m列

int k; //一行的所有狀態數

int map[105]; //'h''p'地圖map[0]~map[n-1],地圖每一行map[line]: 1001 表示hpph

int sum[105];

//狀態s[x]是否造成行衝突

bool ok(int x)

//狀態s[x]下有多少個1

int getsum(int x)

return num;}

void find()

}k=0;

find();

//1. 初始化第0行狀態(只考慮有效狀態,無效狀態為-1)

for(i=0;i

if(!(s[i]&map[0])) //s[i]為1的位如果對應平原(0),則&運算後為0

dp[0][i][0]=sum[i];

//2. 計算第1~n-1行狀態(碰到無效狀態,continue)

for(int r=1;r

} }

}int ans=0;

for(i=0;i

for(int j=0;j

ans=max(ans,dp[n-1][i][j]);

printf("%d\n",ans);

}return 0;

}

22 7每日一題acm

幾周前,一家著名軟體公司公升級了即時通訊軟體。使用者組發布了乙個排名系統。乙個小組的每個成員都有乙個位於他的暱稱附近的等級。級別顯示組中成員的活動程度。每個成員都有乙個基於分數的行為。通過這種方法確定水平 水平百分比 此級別的成員數目 lv1 所有得分均為零的成員 lv2 所有不能達到3級以上但具有...

每日一題 1

題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...

每日一題2018 3 21

leetcode 2 模擬十進位制運算考察單鏈表基本操作。題無難點,個人基礎需要提高。definition for singly linked list.struct listnode class solution while p while q if shi val s next null ret...