首页 > 代码库 > 数列分段Section II
数列分段Section II
洛谷传送门
输入时处理出最小的答案和最大的答案,然后二分答案即可。
其余细节看代码
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int n, m, a[100001], x, y, ans = 100001; 7 8 bool pd(int mid) 9 { 10 int i, sum = 0, tot = 1; 11 for(i = 1; i <= n; i++) 12 { 13 sum += a[i]; 14 if(sum > mid)//分段数+1 15 { 16 sum = a[i]; 17 tot++; 18 } 19 } 20 if(tot > m) return 0; 21 return 1;//如果是小于m的话也还可以再分 22 } 23 24 int main() 25 { 26 int i, j, mid; 27 scanf("%d %d", &n, &m); 28 for(i = 1; i <= n; i++) 29 { 30 scanf("%d", &a[i]); 31 x = max(x, a[i]);//答案最小 32 y += a[i];//答案最大 33 } 34 while(x <= y) 35 { 36 mid = (x + y) >> 1; 37 if(pd(mid)) y = mid - 1; 38 else x = mid + 1; 39 } 40 printf("%d", x); 41 return 0; 42 }
数列分段Section II
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。