度度熊剪紙條

2022-03-31 22:01:17 字數 1190 閱讀 5456

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

inline bool

cmp(p a, p b)

intmain()

else cntst++;

}for (int i = n - 1; ~i; --i)

else cnted++;

}if (cnted ==n)

vector

ans;

ans.clear();

mem(use, 0);

p p[n];

int t = 0

;

for (int i = st; i <= ed; ++i)

}if(t) ans.pb(t);

if (k == 0

)

if (k == 1

)

for (int i = 0; i < ans.size(); ++i) p[i].first = ans[i], p[i].second = 0

;

if (cnted) p[ans.size()].first = cnted, p[ans.size()].second = 1

; sort(p, p + ans.size() + 1

, cmp);

int res = 0

;

for (int i = 0; i < ans.size() + 1; ++i)

else

else

if (k == 2

)

else

if (k == 1

) }

}if (k) res += cntst;cout

<< res <

}return0;

}

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

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

hdu6376 度度熊剪紙條

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

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

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