http://community.topcoder.com/stat?c=problem_statement&pm=11797&rd=14728
(総和の半分) or (総和 - 最大値)
(総和の半分)はすぐに思いつく。
(総和 - 最大値)は分からなかったので小さいケースをいくつか手で試した。
- class RollingDiceDivOne {
- public:
- long long mostLikely(vector <int> D_)
- {
- vector<lli> D(D_.begin(), D_.end());
- if (D.size() == 1) return 1;
- const int N = D.size();
- sort(D.begin(), D.end());
- for (int i = 0; i < N; ++i) {
- --D[i];
- }
- lli a = accumulate(D.begin(), D.end(), 0LL) - D.back();
- lli b = accumulate(D.begin(), D.end(), 0LL) / 2;
- return N + min(a, b);
- }