計蒜客 灌溉機械人(狀壓DP)

2021-08-21 04:59:39 字數 1237 閱讀 3660

灌溉機械人

#include #include using namespace std;

const int max_n = 100;

const int max_m = 10;

int state[max_n + 1];//i行狀態

//int dp[max_n + 1][1 << max_m][1 << max_m];//i行狀態為j i-1行狀態為k時包含的最多1的個數

int dp[2][1 << max_m][1 << max_m];//i行狀態為j i-1行狀態為k時包含的最多1的個數

bool not_intersect(int now, int prev)

bool fit(int now, int flag)

bool ok(int x)

int calc(int now)

return s;

}int main() else

state[i] |= (1 << j) * flag; // 將 (i,j) 格仔的狀態放入 state[i] 中,state[i] 表示第 i 行的可選格仔組成的集合}}

//處理第1行邊界

for(int j = 0; j < (1 << m); ++j)

int cnt = calc(j);

dp[1%2][j][0] = cnt;

}//處理第2行邊界

for(int j = 0; j < (1 << m); ++j)

int cnt = calc(j);

for (int k = 0; k < (1 << m); ++k) }}

//正常處理

for (int i = 3; i <= n; ++i)

int cnt = calc(j); // 統計當前行一共選了多少個格仔

for (int k = 0; k < (1 << m); ++k)

for(int l = 0; l < (1 << m); ++l)

if(not_intersect(j, k) && not_intersect(k, l) && not_intersect(j, l)) }}

}}

int ans = 0; // 儲存最終答案

for (int i = 0; i < (1 << m); ++i)

cout << ans << endl;

return 0;

}

計蒜客習題 機械人

蒜頭君收到了乙份禮物,是乙個最新版的機械人。這個機械人有 4 種指令 forward x,前進x公尺。back x,先向後轉,然後前進x公尺。left x,先向左轉,然後前進x公尺。right x,先向右轉,然後前進x公尺。現在把機械人放在座標軸原點,起始朝向為x軸正方向。經過一系列指令以後,你能告...

計蒜客 31436 提高水平 狀壓DP

作為一名車手,為了提高自身的姿勢水平,平時的練習是必不可少的。小 j 每天的訓練包含 n 個訓練專案,他會按照某個順序依次練習這些專案。出於一些玄妙的原因,訓練的效果跟專案的順序有著很大關係。當專案 i 被安排在專案 j 之前進行訓練,小 j 會獲得 a 的熟練度,否則他會獲得 a 的熟練度。為了使...

計蒜客 騰訊狼人殺 簡單 狀壓 列舉

很久很久以前,在萊茵河畔一座岸壁陡峭的山頂上,有乙個名叫 杜斯特瓦德 的小村莊。不久前,這個小村莊每晚都會受到狼人的侵襲。每個夜晚,狼人都會在村中進行搶劫,並且會有乙個村民成為這群狼人的犧牲品。然而村民們不會坐以待斃,他們試圖在白天找到這些狼人並處決他們。作為杜斯特瓦德村的長老,你需要組織村民來對抗...