題目描述
看完題目,很清楚的想到這道題用狀壓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 要在蛋糕的上表面塗抹果醬。果醬有三種,分別是紅果醬 ...