数列分段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 }
View Code

 

以上是关于数列分段Section II的主要内容,如果未能解决你的问题,请参考以下文章

P1182 数列分段`Section II`

P1182 数列分段`Section II`

luogu P1182 数列分段Section II

luogu p1182 数列分段Section II

P1182 数列分段 Section II

每日一水之 luoguP1182 数列分段Section II