这道题怎么求解?
机器人搬砖,一共N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头,要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格,机器人一个小时中只能在一个仓库中搬砖,机器人的能量格每小时补充一次且能量格只在这一个小时有效,为使得机器人损耗最小化尽量减小每次补充的能量格数。为了保障在8小时内能完成搬砖任务,请计算每小时给机器人充能的最小能量格数。备注:1、无需考虑机器人补充能量格的耗时2、无需考虑机器人搬砖的耗时3、机器人每小时补充能量格只在这一个小时中有效
感觉需要贪心,但是最大仓库的砖块该分成几份呢?#23届找工作求助阵地##牛客在线求职答疑中心#
感觉需要贪心,但是最大仓库的砖块该分成几份呢?#23届找工作求助阵地##牛客在线求职答疑中心#
全部评论
#include<iostream>
(30316)#include<vector>
#include<bits/stdc++.h>
using namespace std;
// 求能量为e时,机器人需要几小时搬运
int sum(vector<int>& bricks,int e){
int rst = 0;
for(int i=0;i<bricks.size();i++){
rst += ceil(float(bricks[i])/ e );
}
return rst;
}
int main(){
vector<int> bricks;
int num;
while(cin >> num ){
bricks.push_back(num);
char ch = getchar();
if(ch == '\n') break;
}
if(bricks.size() > 8) cout << -1 << endl;
int ans;
sort(bricks.begin(),bricks.end());
int mid ,l = 0,r = bricks[bricks.size() - 1];
while(l < r){
mid = (l + r) / 2;
if(sum(bricks,mid) > 8) l = mid + 1;
else r = mid;
}
if(sum(bricks,l) > 8)
ans = -1;
else
ans = l;
cout << ans << endl;
return 0;
}
import math
def min_e(b, H):
l, r = 1, max(b)
while l < r:
m = (l + r) // 2
if sum(math.ceil(i/m) for i in b) > H:
l = m + 1
else:
r = m
if sum(math.ceil(i/l) for i in b) > H:
return -1
return l
b = list(map(int, input().split()))
print(min_e(b,8))
我也遇到了这个题。等待大神解答
相关推荐
07-22 15:08
门头沟学院 运营 牛客74745092...:记住不转正你就是爷
,既然每天能学到东西那就继续干,该几点走几点走,他们爱说说去,感觉学不到东西了再走。何况现在你都受不了这个氛围,就算转正了,过得也会很痛苦,该咋就咋,怂个蛋。

点赞 评论 收藏
分享
06-19 22:53
江西应用科技学院 Java 点赞 评论 收藏
分享
06-29 02:43
西安邮电大学 Java 点赞 评论 收藏
分享