1. 程式人生 > >洛谷 P1182 數列分段`Section II`

洛谷 P1182 數列分段`Section II`

思路: 二分+貪心。

程式碼:

#pragma GCC optimize (2)
#include<bits/stdc++.h>
using namespace std;

#define maxn 100000
#define read(x) scanf("%d",&x)

int n,m;
int a[maxn+5];

bool judge(int x) {
	int s=0,mm=1;
	for(int i=1; i<=n; i++) {
		if(a[i]>x) return false;
		if(s+a[i]>x) {
			mm++;
			s=a[i]
; } else s+=a[i]; if(mm>m) return false; } return true; } int main() { read(n),read(m); for(int i=1; i<=n; i++) { read(a[i]); } int l=0,r=1e9; while(l+1<r) { int mid=(r-l)/2+l; if(judge(mid)) r=mid; else l=mid; } if(judge(l-1)) l--; if(!judge(l)) l++; printf("%d",l)
; return 0; }