2018百度之星(A)度度熊剪紙條

2021-08-22 19:23:43 字數 914 閱讀 9773

度度熊有一張紙條和一把剪刀。

紙條上依次寫著 n 個數字,數字只可能是 0 或者 1 。

度度熊想在紙條上剪 k 刀(每一刀只能剪在數字和數字之間),這樣就形成了 k+1 段。

他再把這 k+1 段按一定的順序重新拼起來。

不同的剪和接的方案,可能會得到不同的結果。

度度熊好奇的是,字首 1 的數量最多能是多少。

input

有多組資料,讀到eof結束。

對於每一組資料,第一行讀入兩個數 n 和 k 。

第二行有乙個長度為 n 的字串,依次表示初始時紙條上的 n 個數。

0≤koutput

對於每一組資料,輸出乙個數,表示可能的最大字首 1 的數量。

sample input

5 1 11010 5 2 11010

sample output

2 3

乙個01揹包,把連續為『1』的字串剪下,在開頭和尾部的花費為1,其餘在中間的花費為2,還有乙個坑就是在中間的乙個可剪下的放到最後就可以少減一次,例如101111001110011,需要剪6次可以把帶『1』的全部剪下,但如果把1111或111放到最後,就像這樣1,11,1111,11100或1,11,111,111100只需5次就可完成,所以等到要用揹包求的時候,需要把k++。

ac**如下:

#includeusing namespace std;

const int maxn=10010;

int f[maxn],k,n;

char c[maxn];

struct node

p[maxn];

int main()

cout<}

}}

百度之星初賽C hdu 6376 度度熊剪紙條

度度熊有一張紙條和一把剪刀。紙條上依次寫著 n 個數字,數字只可能是 0 或者 1。度度熊想在紙條上剪 k 刀 每一刀只能剪在數字和數字之間 這樣就形成了 k 1 段。他再把這 k 1 段按一定的順序重新拼起來。不同的剪和接的方案,可能會得到不同的結果。度度熊好奇的是,字首 1 的數量最多能是多少。...

度度熊剪紙條

ps 改了這麼久,對拍一下就找到錯誤了。貪心,首部出現的1,是不用去剪的,所以當作特殊元素考慮,因此當 k 0的時候 或者 k沒有用完的時候一定要考慮是否用到了首部那一節 cntst 而尾部只需要剪一次,中間的部分需要減兩次,貪心的時候要分別討論 有史以來寫得最醜的 inline bool cmp ...

2018百度之星(A)度度熊學佇列

度度熊正在學習雙端佇列,他對其翻轉和合併產生了很大的興趣。初始時有 n 個空的雙端佇列 編號為 1 到 n 你要支援度度熊的 q 次操作。1 u w val 在編號為 u 的佇列裡加入乙個權值為 val 的元素。w 0 表示加在最前面,w 1 表示加在最後面 2 u w 詢問編號為 u 的佇列裡的某...