题解一
学号:13349159 姓名:张子悦 日期:12/17/2015
题目链接:http://poj.org/problem?id=3273
题目大意:输入 N 个数,并把它们按顺序分成 M 份,求这 M 份每份所有数之和中最大值最小
是多少。
思路:
由于所求结果为整数,可以利用二分法“试”出所需结果。
算法步骤:
1:设置二分法下限 l 为输入数据的最大值,设置上限 l 为所有数据之和
2:设置判断:若 N 个数按所给最大值分得份数不大于 M 份则返回 True,否则返回 False
3:循环:令 m = (l + r) / 2,若 m 符合 2 中条件则令 r=m, 否则 l=m,当 l==r 时退出循
环
循环结束后 l,r 即为所求结果
算法复杂度:
步骤 2 复杂度为 O(n),步骤 3 复杂度为 O(log(n)),总复杂度为 O(nlog(n))
源代码:
#include<iostream>
using namespace std;
int main()
{
int n, m;
cin>>n>>m;
long long num[n], r=0, l=0;