10 17T7 三進製狀壓DP

2022-05-01 18:36:08 字數 1742 閱讀 4786

tyvj兩周年慶典要到了,sam想為tyvj做乙個大蛋糕。蛋糕俯檢視是乙個n*m的矩形,它被劃分成n*m個邊長為1*1的小正方形區域。(可以把蛋糕當成n行m列的矩陣)蛋糕很快做好了,但光禿禿的蛋糕…肯定不好看!所以,sam要在蛋糕的上表面塗抹果醬。果醬有三種,分別是紅果醬、綠果醬、藍果醬,三種果醬的編號分別為1,2,3。為了保證蛋糕的視覺效果,admin下達了死命令:相鄰的區域嚴禁使用同種果醬。但…sam在接到這條命令之前,已經塗好了蛋糕第k行的果醬,且無法修改。

現在,sam想知道,能令admin滿意的塗果醬方案有多少種(mod 10^6)。若不存在這種方案,請輸出0

輸入共三行。

第一行:n,m

第二行:k

第三行:m個整數,表示第k行的方案

字母的詳細含義見題目描述,其他參見樣例

共一行:可行的方案總數。

2 21

2 33

【樣例說明】

第一行的2 3是固定的,合理的果醬塗抹方案共3種:

--方案1--

2 31 2

--方案2--

2 33 1

--方案3--

2 33 2

【資料範圍】

對於30%的資料,1<=n*m<=20

對於60%的資料,1<=n<=1000,1<=m<=3

對於100%的資料,1<=n<=10000,1<=m<=5

三進製狀壓,預處理合法狀態以及能互相相容的合法狀態

然後分類計算k之前的行數和k之後的行數,最後加上最後一行的所有合法狀態的方案數

我這裡特判了m=1這種情況,總的說來不算是很難的一道題

code:

1 #include2 #include3

using

namespace

std;

4const

int mod=1e6;

5int f[10005][300],is[300][300],n,m,a[300

],cnt;

6bool check(int

x) 15

return

true;16

}17bool check2(int x,int

y) 25

return

true;26

}27intmain() 35}

36for(int i=1; i<=cnt; i++) 41}

42}43//

is[0][0]=1;

44int

k;45 cin>>k;

46int s=0;47

//if(k==1)return -1;

48//

if(n==1)return -1;

49for(int i=1; i<=m; i++)

55if(m==1

)61 cout<62return0;

63}64if(check(s)==0

) 68

if(k==1

) else79}

80}81}

82for(int i=1; i<=cnt; i++) 87}

88}89for(int i=k+1; i<=n; i++) 96}

97}98}

99int ans=0

;100

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

104 cout<105return0;

106 }

over

DP 三校聯考1017T3

考場上這題做了我兩個小時。果然第一步都錯了。首先,所謂的絕對值其實可以用最優性忽略!即 a b max a b,b a 所以,不必考慮到底誰大誰小,在最優策略中,一定是合法的。然後就很簡單了 每乙個位置的貢獻分別可能為2,0,2 開頭末尾可能為 1,1 一段連續的2或 2就是一段。這麼搞一下dp就行...

轉 HD7 刷機教程 硬起 進三色屏詳解教程

前言 關機狀態下開機,按住 音量下 鍵,並按住電源鍵 直到出現三色屏再鬆開。刷機 首先要保證你手機有50 電量。手機可以正常鏈結pc,進三色屏後,當螢幕下方的 serial 變成 usb 的時候,開啟pc中rom的exe檔案 進行刷機,刷機過程不要斷電。以及不要執行其他程式 ps 刷機過程中,大約進...

轉 HD7 刷機教程 硬起 進三色屏詳解教程

前言 關機狀態下開機,按住 音量下 鍵,並按住電源鍵 直到出現三色屏再鬆開。刷機 首先要保證你手機有50 電量。手機可以正常鏈結pc,進三色屏後,當螢幕下方的 serial 變成 usb 的時候,開啟pc中rom的exe檔案 進行刷機,刷機過程不要斷電。以及不要執行其他程式 ps 刷機過程中,大約進...