码迷,mamicode.com
首页 > 其他好文 > 详细

数列分段Section II

时间:2017-04-16 18:50:25      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:最大的   pen   span   open   代码   display   数列   int   ios   

洛谷传送门

输入时处理出最小的答案和最大的答案,然后二分答案即可。

其余细节看代码

技术分享
 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

标签:最大的   pen   span   open   代码   display   数列   int   ios   

原文地址:http://www.cnblogs.com/zhenghaotian/p/6719530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!