日常訓練 CZA的蛋糕

2021-08-04 15:59:06 字數 1368 閱讀 1679

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 接下來...