灌溉機械人
#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 的熟練度。為了使...
計蒜客 騰訊狼人殺 簡單 狀壓 列舉
很久很久以前,在萊茵河畔一座岸壁陡峭的山頂上,有乙個名叫 杜斯特瓦德 的小村莊。不久前,這個小村莊每晚都會受到狼人的侵襲。每個夜晚,狼人都會在村中進行搶劫,並且會有乙個村民成為這群狼人的犧牲品。然而村民們不會坐以待斃,他們試圖在白天找到這些狼人並處決他們。作為杜斯特瓦德村的長老,你需要組織村民來對抗...