CF985C 题解
CF985C题解
思路
由题意得知,现在有 块木板需要组装成 个木桶,每个木桶由 块板组成,容量服从短板原理,要求容量差不得超过 ,求最大容量和。
不管采用什么方法,无疑我们首先需要将板长(数组 )从小到大排列。
利用贪心算法。先找出与 的长度差不超过 的木板 , 如果 不超过 (桶的数目),说明无法组装成满足题目条件的桶,输出 。每次从这些木板中取出尽可能多的木板(上限为 )组装在同一个桶,假使剩下的木板数量仍不少于尚待组装的木桶的数目。
代码
#include <iostream> #include <algorithm> using namespace std; unsigned long long maxVol() { int n, k, l; // n个桶,每个桶k块板,桶容量差不超过l cin >> n >> k >> l; unsigned long long int a[n * k]; // 板长 for(int i = 0; i < n * k; i++) cin >> a[i]; sort(a, a + n * k); int index = 0; while(a[index] - a[0] <= l && index < n * k) index++; if(index < n) return 0; unsigned long long int sum = 0; int i = 0; while(n != 0) { sum += a[i]; if(index - i - n >= k) i += k; else i = index - n + 1; n--; } return sum; } int main() { cout << maxVol() << endl; return 0; }
本文作者:merlinkkk
本文链接:https://www.cnblogs.com/merlinkkk/p/17832514.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步