1 条题解

  • 0
    @ 2023-6-21 20:13:14

    C++ :

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int MXN = 100000;
    int n, m;
    int a[MXN];
    int check (int m) {
    	int t, ans;
    	t = 0;
    	ans = 1;
    	for (int i = 0; i < n; i++) {
    		if (t + a[i] <= m)
    			t += a[i];
    		else {
    			t = a[i];
    			ans ++;
    		}
    	}
    	return ans;
    }
    int main() {
    	//freopen("divide_b4.in", "r", stdin);
    	//freopen("divide_b4.out", "w", stdout);
    	scanf ("%d%d", &n, &m);
    	int l = 0;
    	int r = 0;
    	for (int i = 0; i < n; i++) {
    		scanf ("%d", &a[i]);
    		r += a[i];
    		l = max (l, a[i]);
    	}
    	while (l < r) {
    		int mid = (l + r) / 2;
    		if (check(mid) <= m)
    			r = mid;
    		else
    			l = mid + 1;
    	}
    	printf ("%d\n", l);
    }
    
    
    • 1

    #10014. 「一本通 1.2 练习 1」数列分段 II

    信息

    ID
    1056
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    4
    已通过
    2
    上传者