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 #include3using
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 刷機過程中,大約進...