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