[POJ 4135] Gastos mensuales (dicotomía)

Descripción

El granjero John es un asombroso mago de la contabilidad y se dio cuenta de que podría quedarse sin dinero para administrar la granja. Él ya ha calculado y registrado la cantidad exacta de dinero (1 ≤  moneyi  ≤ 10,000) que necesitará gastar cada día durante los próximos  N  (1 ≤  N  ≤ 100,000) días.

FJ quiere crear un presupuesto para un conjunto secuencial de exactamente  M  (1 ≤  M  ≤  N ) períodos fiscales llamados "fajomonths". Cada uno de estos fajomonths contiene un conjunto de 1 o más días consecutivos. Todos los días están contenidos exactamente en un fajomonth.

El objetivo de FJ es organizar los fajomonths para minimizar los gastos del fajomonth con el gasto más alto y así determinar su límite de gasto mensual.

 

De entrada

Línea 1: Dos enteros separados por espacios: N y M 
Líneas 2..N + 1: La línea i + 1 contiene la cantidad de dólares que el agricultor John gasta en el día i-ésimo

Salida

Línea 1: El límite mensual más pequeño posible con el que el agricultor John puede permitirse vivir.

Entrada de muestra

7 5
100
400
300
100
500
101
400

Salida

500

Solución

#include <iostream>
#include <algorithm>
using namespace std;


int a[100005], n=0, m=0;
bool judge(int mid) {        
  int sum=0, t=0;                // sum为开销计数器,t为fajomonths计数器
  for (int i=0; i<n; i++) {      // sum一直累加,一旦超过猜测值,则开销a[i]为下个fajo月的
    if (sum+a[i] > mid) {         
      sum = a[i];                
      t++;
    }
    else sum += a[i];           
  }
  
  return t>=m;                   
}


int binarysearch(int l, int r) {
  int mid;
  do {
    mid = l + (r-l)/2;            // 防止溢出
    if (judge(mid)) l=mid+1;
    else r=mid-1;
  } while (l<=r);                 // 闭区间
  
  return mid;
}

int main() {
    int total=0, max=0;
    cin>>n>>m;
    for(int i=0;i<n;i++) {
        cin>>a[i];
        total+=a[i];            //记录开销的总和 
        if(max<a[i]) max=a[i];  //数组不能排序,记录开销的最大值
    }

    cout << binarysearch(max,total) << endl;        
    return 0;
}
Publicado 21 artículos originales · elogiado 8 · visitas 1495

Supongo que te gusta

Origin blog.csdn.net/K_Xin/article/details/87864712
Recomendado
Clasificación