Browse Source

二分答案+贪心求解

zj 5 years ago
parent
commit
c715f9dd82
1 changed files with 41 additions and 0 deletions
  1. 41 0
      F.cpp

+ 41 - 0
F.cpp

@@ -0,0 +1,41 @@
+#include<bits/stdc++.h>
+
+using namespace std;
+
+int main() {
+    ifstream cin("data2.in");
+    int n;
+    cin >> n;
+    vector<int> v(n);
+    int Max = 0, Sum = 0;
+    for (int i = 0; i < n; i++) {
+        cin >> v[i];
+        Sum += v[i];
+        Max = max(Max, v[i]);
+    }
+    int m;
+    cin >> m;
+    int left = Max, right = Sum, best = Sum;
+    while (left <= right) {
+        int Mid = (left + right) >> 1;
+        int cur = 0, tot = 0;
+        for (int i = 0; i < n; i++) {
+            if (cur + v[i] > Mid) {
+                tot++;
+                cur = v[i];
+            } else {
+                cur += v[i];
+            }
+        }
+        if(cur!=0)
+            ++tot;
+        if (tot <= m) {
+            best = Mid;
+            right = Mid - 1;
+        } else {
+            left = Mid + 1;
+        }
+    }
+    cout << best << endl;
+    return 0;
+}