1.11 06: Gastos mensuales

Descripción
Farmer John es un contable astuto. Se dio cuenta de que tal vez no tuviera suficiente dinero para mantener la granja en funcionamiento. Calculó y registró los gastos diarios de los siguientes N (1 ≤ N ≤ 100.000) días.

John tiene la intención de crear un presupuesto para ciclos fiscales consecutivos M (1 ≤ M ≤ N), y nombró un mes fajo de ciclo fiscal. Cada mes de fajo contiene un día o varios días consecutivos, y cada día se incluye exactamente en un mes de fajo.

El objetivo de John es organizar razonablemente la cantidad de días incluidos en cada mes de fajo para que el costo del mes de fajo más caro sea lo más bajo posible.

Entrada La
primera línea contiene dos números enteros N, M, separados por un solo espacio.
Las siguientes N líneas, cada línea contiene un número entero entre 1 y 10,000, dando el costo diario de los próximos N días en orden.
Genere
un número entero, que es el valor mínimo del costo mensual máximo.
Entrada de la muestra
7 5
100
400
300
100
500
101
400
Ejemplo de salida
500

#include <iostream>
using namespace std;
#define MAX 100010
int main()
{
    
    
	int n,m,a[MAX],min=0,max=0,mid,i,temp,count,ans=0;
	cin>>n>>m;
	for(i=0;i<n;i++)
	{
    
    
		cin>>a[i];
		if(a[i]>min)
			min = a[i];
		max += a[i];	
	}
	if (m == 1 || n==1)
	{
    
    
		cout<<max<<endl;
	} else
	{
    
    
		while(min<=max)
		{
    
    
			mid = (min+max+1)/2;
			temp=0;
			count = 1;
			for (i=0;i<n;i++)
			{
    
    				
				if(temp + a[i] > mid)
				{
    
    
					count++;
					temp = a[i];
				} else
				{
    
    
					temp += a[i];
				}			
			}
			if (count <= m)
			{
    
    	
				ans = mid;
				max = mid-1;
					
			}else
			{
    
    
				min = mid+1;
			}	
		}
		cout<<ans<<endl;
	}
	
	
	return 0;
} 

Supongo que te gusta

Origin blog.csdn.net/yansuifeng1126/article/details/112214490
Recomendado
Clasificación