【算法题】切割木材
来源:互联网 发布:c语言中int占几个字节 编辑:程序博客网 时间:2024/04/27 15:33
问题如图:
注:木头不一定都要用,用也不一定都要用完
- 问题可以转化成在1和给的所有原木中最长的长度中间找一个合适的长度,使得把每段原木按此分段后得到的小段木头数目至少为k:在1—max之间用折半查找,找到最大的长度
//def woodCut(self, L, k){// if sum(L) < k :// return 0//// start, end = 1, max(L)// while start + 1 < end :// mid = start + (end - start) / 2// pieces = sum([l / mid for l in L])// if pieces >= k :// start = mid// else :// end = mid//// if sum([l / end for l in L]) > k:// return end// return start//}#include <stdio.h>#include <numeric>using namespace std;int k(0);int array[10000];int len(0), max_wood(0);int WoodCut()//二分查找上界{ int sum = accumulate(array, array+len,0); if (sum < k) return 0; int left(1), right(max_wood); int mid; while (left+1<right) { mid = left + (right - left) / 2; int k_tmp(0); for (auto i = 0; i <= len ;i++) { k_tmp += array[i] / mid; } if (k_tmp>=k) { left = mid; } else { right = mid; } } int right_k(0); for (auto i = 0; i <= len; i++) { right_k += array[i] / right; } if (right_k>=k) { return right; } else { return left; } return 0;}int main(){ char c; scanf("%d", &k); while (1) { scanf("%d", &array[len]); if (array[len]>max_wood ) { max_wood = array[len]; } c = getchar(); if (c=='\n') { break; } ++len; } printf("%d",WoodCut()); return 1;}
阅读全文
0 0
- 【算法题】切割木材
- 贪心算法之木材装集装箱问题
- 算法谜题30 棍子切割
- 算法谜题124 切割链条
- 算法爱好者——木材加工 ? 待解决
- Bitmap 任意切割算法
- 地图切割算法
- 短信切割算法
- MapXtreme地图切割算法
- 钢条切割--【算法导论】
- CODEVS 3297 木材加工 一道有毒的水题
- 183.Wood Cut-木材加工(中等题)
- 木材加工
- 木材加工
- 木材加工
- 木材加工
- 百度地图切割算法讲解
- unity 网格切割算法讲解
- Android四大组件之Broadcast Receiver
- MJRefresh使用的简单步骤
- HBMY OJ- 1903 有解么?
- Machine Learning Review 1
- A. 足球锦标赛
- 【算法题】切割木材
- 游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 (重现)F. 蚂蚁
- web--5.uuid
- 179. Largest Number-medium
- Web前端开发框架推荐
- Codeforces Round #415 (Div. 2)C. Do you want a date? (数学归纳)
- 5.2解题报告
- linux completion 完成量
- Linux内核模块