LOJ 10172 塗抹果醬 狀壓DP

2021-09-11 10:59:15 字數 896 閱讀 6492

題目描述

看完題目,很清楚的想到這道題用狀壓dp來做,只不過這道題是個三進製的,做題過程中須注意轉換。

下面簡單說一下演算法

1. 用0 1 2 來代替題目中的1 2 3這樣比較方便,將第k行以三進製數存入。先用乙個陣列存所以可行的狀態,若第k行的狀態不在陣列裡,直接輸出0.

2. 這道題中已經給出了一行的狀態,所以搜到k行要特判

#include#include#includeusing namespace std;

const int modd=1e6;

int ans[10005][2187],st[2187],f,an,n,m,tot,pp;

int jud(int x)

return 1;

}int ff(int x,int y)

return 1;

}int main()

for(int i=0;iif(jud(i)==1) st[++tot]=i;

for(int i=1;i<=tot;i++)

if(f==st[i])

if(pp==0)

//ans[i][j]表示第i行 狀態為j的方案數

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

else

for(int j=1;j<=tot;j++)//列舉本行狀態

}for(int i=1;i<=tot;i++)

an=(an+ans[n][i])%modd;

printf("%d",an);

return 0;

}

Loj10172 塗抹果醬

題目描述 tyvj 兩周年慶典要到了,sam 想為 tyvj 做乙個大蛋糕。蛋糕俯檢視是乙個 n m 的矩形,它被劃分成 n m 個邊長為 1 1 的小正方形區域 可以把蛋糕當成 nnn 行 mmm列的矩陣 蛋糕很快做好了,但光禿禿的蛋糕肯定不好看!所以,sam 要在蛋糕的上表面塗抹果醬。果醬有三種...

LOJ 10172 塗抹果醬

思路 看到資料範圍,考慮狀壓 dp 發現每一格有 3 種情況,考慮用三進製來表示。列舉所有情況,將可行解與其三進製建立對映關係。由於第 k 行上下互不影響,我們可以分別進行 dp 根據乘法原理相乘即可得到答案。為了優化時間,我們可以先將可互相轉移的狀態記錄下來,dp 時直接查詢即可。include ...

塗抹果醬 狀壓dp

題目描述 tyvj 兩周年慶典要到了,sam 想為 tyvj 做乙個大蛋糕。蛋糕俯檢視是乙個n m 的矩形,它被劃分成n m 個邊長為 1 1的小正方形區域 可以把蛋糕當成n 行 m列的矩陣 蛋糕很快做好了,但光禿禿的蛋糕肯定不好看!所以,sam 要在蛋糕的上表面塗抹果醬。果醬有三種,分別是紅果醬 ...