zoukankan      html  css  js  c++  java
  • 数列分段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
  • 相关阅读:
    stack 栈
    链表
    2018.09.08 DL24 Day1 总结
    10.07 WZZX Day2总结
    10.06 WZZX Day1总结
    Joseph问题 (线段树)
    [POI2006]TET-Tetris 3D
    10.05FZSZ Day2模拟总结
    Tarjan求LCA
    数据结构
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/6719530.html
Copyright © 2011-2022 走看看