东莞网站公司推广技巧,网上写作平台有哪些,充值话费网站建设,淘宝联盟推广可以做网站吗题目链接#xff1a;https://vjudge.net/problem/POJ-3273 把n个连续的数字划分成m个连续的部分#xff0c;每个部分都有一个部分和#xff08;这个部分所有值加起来#xff09;#xff0c;现在要使划分里最大的那个部分和最小。 我用的也是二分#xff0c;用二分枚举最大…题目链接https://vjudge.net/problem/POJ-3273 把n个连续的数字划分成m个连续的部分每个部分都有一个部分和这个部分所有值加起来现在要使划分里最大的那个部分和最小。 我用的也是二分用二分枚举最大的部分和。 代码 #includeiostream
#includecstring
#includealgorithm
#includequeue
#includemap
#includestack
#includecmath
#includevector
#includefstream
#includeset
#includecstdio
using namespace std;
#define eps 1e-8
#define ll long long
#define INF 0x3f3f3f3f
ll n,m,money[100005];
ll jug(ll mid) //循环一次判断mid
{ll cnt0; //计数 ll summoney[0];cnt;if(summid)return 0; if(cntm)return 0;for(int i1;in;i){if(summoney[i]mid){summoney[i];}else{summoney[i];if(summid)return 0;cnt;if(cntm)return 0;}}return 1;
}
ll two_(ll l,ll r) //二分求最小
{ll mid,pos;while(lr){mid(lr)/2;if(jug(mid)) //判断这个mid值是否可行 {rmid-1;posmid; //pos记录当前值这种写法比较保险因为r值不一定可行但是mid值是一定可行的 }else{lmid1;posl;}}return pos;
}
int main()
{while(cinnm){ll sum0;for(int i0;in;i){cinmoney[i];summoney[i];}couttwo_(1,sum)endl;}return 0;
} 转载于:https://www.cnblogs.com/6262369sss/p/9441428.html