首页 > 工资

工资

(money/money.in/money.out)
时限1000ms 内存256MB
聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi。有m个结算工钱的时间,聪哥可以自由安排这些时间,也就是说什么时候拿钱,老板说的不算,聪哥才有发言权!(因为聪哥是土豪,他是老板的老板)
聪哥不喜欢身上一次性有太多的钱,于是他想安排一下拿钱的时间,使他一次性拿的钱中最大的最小。(最后一天一定要领钱)
输入
第一行 2个数 n,m
接下来n行,每行一个数,代表Vi.
输出
最小的最大钱数。
样例输入
7 5
100
400
300
100
500
101
400
样例输出
500
样例说明 
100 400//300 100//500//101//400////”表示老大要去拿钱。
数据范围
20%   1<=n<=2020%  1<=n<=50,Vi的和不超过1000
100%  1<=n<=100,000,m<=n,Vi<=10,000
题面

明显,二分答案,是的最大的区间段和最小

还有一个限制条件,最后一天必须结算

判断的时候加以分析就好了

分值:100/100

 1 #include 
 2 #include
 3 #include
 4 #include<string>
 5 #include
 6 #include
 7 #include
 8 #define ll long long
 9 #define DB double
10 using namespace std;
11 inline int read()
12 {
13     int x=0,w=1;char ch=getchar();
14     while(!isdigit(ch)){ if(ch=='-') w=-1;ch=getchar();}
15     while(isdigit(ch)) x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
16     return x*w;
17 }
18 const int N=1e5+100;
19 int n,m,a[N],M;
20 ll ans,L,R,mid,k;
21 bool v[N];
22 bool ok(ll x)
23 {
24     M=0;k=0;v[n]=0;
25     for(int i=1;i<=n;++i)
26     {
27         if(xreturn 0;
28         k+=a[i];
29         if(k>x) M++,k=a[i],v[i-1]=1;
30 //        cout<
31         if(M>m) return 0;
32     }
33     if(k>x) return 0;
34 //    cout<
35     if(!v[n]){v[n]=1;M++;}
36     if(M<=m) return 1;
37     return 0;
38 }
39 int main()
40 {
41     freopen("money.in","r",stdin);
42     freopen("money.out","w",stdout);
43     n=read();m=read();
44     for(int i=1;i<=n;++i) a[i]=read(),R+=a[i];
45 //    cout<
46     while(L<=R)
47     {
48         mid=(L+R)>>1;
49         if(ok(mid)) ans=mid,R=mid-1;
50         else L=mid+1;
51     }
52     printf("%lld",ans);
53     return 0;
54 }
View Code

转载于:https://www.cnblogs.com/adelalove/p/9032733.html

更多相关:

  • #include #include #include #include #include #include #include

  • 题目:表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"及"-1E-16"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。 解题: 数值错误的形式有多种多样,但是正确的...

  • 加法伺候  //超过20位数值相加---------------------------------------- function bigNumAdd(a, b) {if (!(typeof a === "string" && typeof b === "string")) return console.log("传入参数必...

  • 业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发挥作用,必须非常谨慎.推荐最好统一为utf8编码,如果不是这种最优情况,也有酌情处理. 往往一个具有普适性的正则表达式会简化程...

  • 简单record 一下 #include // 'struct sockaddr_in' #include #include // 'struct ifreq' and 'struct if_nameindex' #include #inc...

  • 关于点云的分割算是我想做的机械臂抓取中十分重要的俄一部分,所以首先学习如果使用点云库处理我用kinect获取的点云的数据,本例程也是我自己慢慢修改程序并结合官方API 的解说实现的,其中有很多细节如果直接更改源程序,可能会因为数据类型,或者头文件等各种原因编译不过,会导致我们比较难得找出其中的错误,首先我们看一下我自己设定的一个场景,...

  • /* 使用正态分布变换进行配准的实验 。其中room_scan1.pcd room_scan2.pcd这些点云包含同一房间360不同视角的扫描数据 */ #include #include #include #include

  • #include #include #include #include ...

  • #include #include #include #include #include #include...

  • #include #include #include #include int main (int argc,...

  • /*判断屏幕宽高比是否为16:9*/ function isScreen16to9() {return window.screen.height / window.screen.width === 9 / 16; }...

  • /*关闭、刷新、跳转、离开当前网页前提示*/ onbeforeunload = function () {return false; };  ...

  • let json = {/**判断JSON格式*/ isJSON: function (str) {if (typeof str == "string") {try {var obj = JSON.parse(str);if (typeof obj == "object" && obj) {return true;} else {...

  •   项目结构   index.js //必须要安装否则就别想运行了❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤ //npm i body-parser -D & cnpm i express & cnpm i node-xlsx & cnp...

  • 一、递归 函数    为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性      在函数中能用return的不要print 1、递归的最大深度997 def foo(n):print(n)n+=1foo(n) foo(1) 递归的最大深度 2、修改递归的最大深度     由此我们可以看出,未报错之前能看到的最大数...