【分析】
本來想的和周偉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 表示 如下圖。在每一格平原地形上最多可以布置一支炮兵部隊 山地上不能夠部署炮兵部隊 一支炮兵部隊在地圖上的攻擊範圍如圖中黑色區域所示 如果在地圖...