数列分段Section II
Posted 蒟蒻zht的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数列分段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的主要内容,如果未能解决你的问题,请参考以下文章