cza特別喜歡吃海苔,怎麼吃也吃不夠。cza的生日到來時,他的父母給他買了許許多多的海苔和乙個生日蛋糕。海苔是乙個1
× 2或2
× 1的長方形,而蛋糕則是乙個n
× m的矩陣。蛋糕上有一些蠟燭佔據了位置,其他地方都可以放海苔。cza的父母讓cza把海苔盡可能多的放在蛋糕上,但是海苔不能夠重疊放置。cza想把海苔留著自己以後慢慢吃,可又不敢違背父母,於是他決定放一少部分在蛋糕上。為了不使父母起疑,cza必須確保放置完海苔後,蛋糕上不存在1
× 2和2
× 1的空白以放置更多的海苔。cza想知道這樣得花多少海苔,請幫助他求出滿足這樣放置所需的最少海苔數。
輸入的第一行是蛋糕的規模n和m(注意是n行m列)
接下來的n行每一行含m個字元。每個字元要麼是」.」,表示空白;要麼是」*」,表示蠟燭
輸出檔案只包含乙個整數k,表示滿足題目要求的最小海苔數。
3 3
… .*.
…對於30%的資料n<=5,m<=5。
對於100%的資料n<=70, m<=7。
#include
#include
using
namespace
std;
const
int maxn = 0x3f3f3f3f;
const
int n = 75, m = (1
<< 7) + 5;
int f[2][m][m], a[n]; char c[10];
int i, j, k, n, m, ans = maxn;
inline
void ckmin(int &x, const
int &y)
inline
void dfs(const
int &x, const
int &opx, const
int &opy, const
int &opz, const
int &stp)
//opx表示當前第i - 1行的海苔狀態,opy表示當前第i行的海苔狀態,opz表示當前第i + 1行的海苔狀態
int main()
int t = (1
<< m);
for (j = 0; j < t; ++j)
for (k = 0; k < t; ++k) f[0][j][k] = maxn;
f[0][t - 1][a[1]] = 0;
for (i = 1; i <= n; ++i)
for (j = 0; j < t; ++j) ckmin(ans, f[n & 1][j][0]);
printf("%d\n", ans);
}
日常訓練 壓縮
巨大的文字往往令人頭疼,特別是文字內容有大量重複的情況下,巨大的文字不便於運輸和閱讀,於是我們提出了noip nonsense obivous index pattern 荒謬的顯然索引法 一種 有效的 壓縮文字的方法。noip壓縮後的格式很特別,乙個文字壓縮後由若干個單元組成,每個單元由3部分組成...
日常訓練 Tree
j 對於h u j 時間複雜度的證明也是比較經典了,每次列舉的是sz eu s zev 相當於每次從a,b 中各任選一點,它們的lc a 為 u 這樣的點對列舉不會重複,因此總的時間複雜度為o n2 include include include include include using name...
日常訓練 mod
給定 p 1,p 2,p n,b 1,b 2,b m 求滿足 x mod p 1 equiv a 1,x mod p 2 equiv a 2,x mod p n equiv a n 的 x 對 b 1,b 2,b m 取模的結果.第一行兩個整數 n,m 接下來 n 行,每行有乙個整數 a i 接下來...