博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三周 动态规划算法(1):2.木材加工
阅读量:7283 次
发布时间:2019-06-30

本文共 1570 字,大约阅读时间需要 5 分钟。

总时间限制:
1000ms
内存限制:
65536kB
描述
木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目是给定了。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。
木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是正整数。
输入

第一行是两个正整数NK(1 <=N<= 10000, 1 <=K<= 10000),N是原木的数目,K是需要得到的小段的数目。

接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。
 

输出
输出能够切割得到的小段的最大长度。如果连1厘米长的小段都切不出来,输出"0"。
样例输入
3 7232124456
样例输出
114
#include 
#include
#include
#include
#include
using namespace std;int n = 0, k = 0, sum = 0, count = 0;int len[10005] = {
0};int cou(int c){ int count = 0; for(int j = n - 1; j >= 0; --j) { count += len[j] / c; } return count;}int main(int argc,const char *argv[]){ scanf("%d%d", &n, &k); for(int i = 0 ; i < n ; ++i) { scanf("%d", &len[i]); sum += len[i]; } sort(len, len + n); if(k > sum) printf("0\n"); else { int left = 1, right = sum / k, mid = (left + right) / 2; while (true) { if(left == right) break; if(right - left == 1) { if(cou(right) != cou(mid)) right = mid; break; } if(cou(mid) < k) { right = mid; mid = (left + right) / 2; } else { left = mid; mid = (left + right) / 2; } } printf("%d\n", right); } return 0;}

转载于:https://www.cnblogs.com/Konayuki2015/p/4514247.html

你可能感兴趣的文章
review what i studied `date` - 2017-4-19
查看>>
linux系统中如何查看日志 (常用命令)
查看>>
Java IO与NIO 学习
查看>>
SSH登录的时候显示一些实用信息
查看>>
CentOS 7 安装 MySQL
查看>>
Cisco 无线AP 初始化配置WPA加密日记
查看>>
java最最基础的题目(满分100分,笔试,不可上机):
查看>>
5月第1周中国五大顶级域名净增6,103个 美国净减7万个
查看>>
12月第3周全球域名商新增注册量20强:易名夺冠
查看>>
js伪3D图片翻页特效,带缩略图可无限屏
查看>>
从ORACLE RAC角度看跨数据中心的存储双活配置注意事项
查看>>
【产品功能】配置网卡从此与关机无缘,弹性网卡支持热插拔功能
查看>>
深入解读HBase2.0新功能之高可用读Region Replica
查看>>
发布国内首个无服务器容器服务,运维效率从未如此高效
查看>>
国外服务器不能打开国内网站是什么问题?
查看>>
android 蓝牙监测
查看>>
UG二次开发中问取某个图档的修改历史信息
查看>>
程序员不应该再犯的五大编程错误
查看>>
win10 java 1.8jdk换1.7jdk
查看>>
Linux 进程相关
查看>>