NOI 2001 炮兵陣地

2021-07-29 16:32:48 字數 1031 閱讀 9771

【分析】

本來想的和周偉nei胖子差不多…但是感覺時間會炸,於是又苟且看了講解…發現胖子果然用會炸的方法…但是畢竟十幾年前的題了…資料略弱(。・・)ノ

dp[i][j][k]表示前i行中,第i行狀態為j,第i-1行狀態為k時炮兵的最多數量(狀態均為01的二進位制串)。方程很好寫: dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][l]+num[j]),num[j]代表狀態j的炮兵數量,比如num[10101]=3。把jkl都列舉一下就行(雖然時間上趨近於炸)。

至於預處理,留給讀者思考吧。(先找出所有不合法的相鄰與隔乙個相鄰的狀態標記,然後再處理合法狀態中占有山地的狀態…具體用暴力實現。複雜度一千w)

【**】

//noi 2001 廉淵公升的陣地(炮兵陣地)

#include

#include

#include

#include

#include

#define ll long long

#define m(a) memset(a,0,sizeof a)

#define fo(i,j,k) for(i=j;i<=k;i++)

using namespace std;

int n,m,p,ans;

bool b[1<<10],can[105][12],ok[105][1<<10];

int num[1<<10],dp[2][1<<10][1<<10]; //前i行,且第i行為狀態j時,第i-1行為k時 的最多人數

inline void init()

fo(i,0,10) change[1if(!now) }

if(flag) ok[i][s]=1;}}

}}int main()

fo(j,0,(1printf("%d\n",ans);

return 0;

}//5 4

//phpp

//pphh

//pppp

//phpp

//phhp

NOI2001 炮兵陣地

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

NOI2001 炮兵陣地

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

NOI2001 炮兵陣地

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