LintCode : 木材加工
来源:互联网 发布:seo常用查询方法 编辑:程序博客网 时间:2024/04/27 16:39
LintCode : 木材加工
题目
有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。
样例
有3根木头[232, 124, 456], k=7, 最大长度为114.
思路
首先我们先找到可能的最大长度,也就是所有木头长度的总和除最小段。然后我们用二分查找去寻找满足k的最大长度。因为要求最大长度,所以可能会有不同的长度满足相同的小段数。所以我们的判停条件为minlen < maxlen。同时因为设置的maxlen是满足最小段大于k的所以二分的时候midlen = (minlen + maxlen + 1)/ 2而不是(minlen + maxlen)/ 2,不知道有没有小伙伴会像我一样犯这样的错误,所以先写在这,具体代码如下(对了,因为求和的缘故,所以中间变量使用long long防止溢出)。
代码
int woodCut(vector<int> L, int k) { long long alllen = 0; for(long long i = 0; i < L.size(); i++) { alllen += L[i]; } long long maxlen = alllen / k; long long minlen = 0; while(minlen < maxlen) { if(maxlen == 0) { return 0; } long long midlen = (minlen + maxlen + 1) / 2; long long segment = 0; for(long long i = 0; i < L.size(); i++) { segment += L[i] / midlen; } if(segment >= k && minlen != midlen) { minlen = midlen; } else { maxlen = midlen - 1; } } return minlen;
0 0
- LintCode-木材加工
- LintCode 木材加工
- lintcode-木材加工-183
- lintcode 木材加工
- LintCode 木材加工
- LintCode : 木材加工
- LintCode 183 木材加工
- LintCode : 木材加工
- Lintcode 木材加工
- 木材加工-LintCode
- 木材加工
- 木材加工
- 木材加工
- 木材加工
- wikioi 3297 木材加工
- [POJ2774]木材加工
- OpenJugde - 2774:木材加工
- OpenJudge 2774 木材加工
- 文本代码复制
- android6.0运行时权限
- mysql分区
- Jquery——Day7(Ajax提交表单)
- 【Android】入门的一些知识。
- LintCode : 木材加工
- 文章标题
- HDU 2504 又见GCD
- HQL查询
- get和post,session和cookie的一些说明
- 贝叶斯算法详解
- Raspberry Pi | 树莓派 (RASPBERRY PI 3 MODEL B) 上手
- VUE2.0 写出增删改查的 配合model的弹出的
- Longest Substring Without Repeating Characters