[BZOJ3791]作业
Description
眾所周知,白神是具有神奇的能力的。
比如說,他對數(shù)學作業(yè)說一聲“數(shù)”,數(shù)學作業(yè)就會出于畏懼而自己完成;對語文作業(yè)說一聲“語”,語文作業(yè)就會出于畏懼而自己完成。
今天,語文老師和數(shù)學老師布置了許多作業(yè),同學們紛紛尋找白神尋求幫助。白神作為一個助人為樂的人,便答應(yīng)下來。
回到家,白神將這N份作業(yè)按順序攤開,發(fā)現(xiàn)語文作業(yè)數(shù)學作業(yè)混在一起,這就讓白神苦惱起來,他如果對連續(xù)一段作業(yè)喊出“數(shù)”,那么里面的語文作業(yè)就會由于過于慌亂而寫滿錯解,不過如果白神再對其喊一聲“語”,它又會寫滿正確答案。
雖然白神很強大,但是能力還是有限制的,一天只能使用K次,現(xiàn)在,白神想知道他能正確的完成多少份作業(yè)。
Input
第一行兩個整數(shù)N,K。
第二行N個0或者1表示這份作業(yè)是語文作業(yè)還是數(shù)學作業(yè)。
Output
輸出一個整數(shù),表示白神能正確完成的作業(yè)數(shù)。
Sample Input
5 20 1 0 1 0
Sample Output
4HINT
100%的數(shù)據(jù)中N ≤ 100000,K<=50.
Source
好騷的$dp$。首先如果說每個點只會被染一次色的話,我們是不是可以很輕松的推出$dp$轉(zhuǎn)移式?事實上,發(fā)動$k$次技能,最多把序列分成$k*2-1$段,每段我們要數(shù)目較多的那種顏色,這樣就可以轉(zhuǎn)移了
代碼:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int n,K,ans,num; 5 int co[100010]; 6 int dp[100010][101][2]; 7 int main() 8 { 9 scanf("%d%d",&n,&K); 10 for(int i=1;i<=n;i++) scanf("%d",&co[i]),num+=co[i]==0; 11 for(int k=1;k<=2*K-1;k++) 12 for(int i=1;i<=n;i++) 13 for(int c=0;c<=1;c++) 14 { 15 dp[i][k][c]=max(dp[i-1][k-1][c^1],dp[i-1][k][c])+(c==co[i]); 16 ans=max(dp[i][k][c],ans); 17 } 18 printf("%d",ans); 19 return 0; 20 }?
轉(zhuǎn)載于:https://www.cnblogs.com/Slrslr/p/9585229.html
總結(jié)
以上是生活随笔為你收集整理的[BZOJ3791]作业的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac安装dubbo-admin
- 下一篇: 马昕璐201771010118《面向对象