算法提高--接水问题
问题描述 有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………..tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少? 输入格式 第一行n,r (n<=500,r<=75) 第二行为n个人打水所用的时间Ti (Ti<=100); 输出格式 最少的花费时间 样例输入 3 2 1 2 3 样例输出 7 数据规模和约定 其中80%的数据保证n<=10
这个问题的难度不在于贪心选择,肯定都是要时间越短的越靠前接水
因为他们的接水时间是固定的,必须要他们的等待时间最短才能保证总时间是最短的
这个问题难点在于怎么计算总时间
计算方法是,另找一个数组,把本题的人的总时间存储起来
前r 个排队时间是0,直接存本身,后面的是自己的排队时间加上自己的时间,
其实排序完成后,时间已经是固定的了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> #include <algorithm> using namespace std; int a[1000]; int b[1000]; int main() { int n; int r; int sum=0; cin>>n; cin>>r; for ( int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); for ( int j=0;j<r;j++) { b[j]=a[j]; } for ( int i=r;i<n;i++) { b[i]=b[i-r]+a[i]; } for ( int x=0;x<n;x++) { sum=sum+b[x]; } cout<<sum; return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现