zoukankan      html  css  js  c++  java
  • 算法提高--接水问题

    问题描述
      有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,直接存本身,后面的是自己的排队时间加上自己的时间,

    其实排序完成后,时间已经是固定的了。

    #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;
    }
    

      

  • 相关阅读:
    oracle连接命令
    oracle Wrap加密
    oracle copy
    oracle loader
    oracle一些常见的问题
    python-cn(华蟒用户组,CPyUG 邮件列表)
    代理服务器验证工具
    多线程中的信号/槽
    【多线程】python界面阻塞,白屏,not responding解决的简单例子
    vi命令
  • 原文地址:https://www.cnblogs.com/jweie/p/8423573.html
Copyright © 2011-2022 走看看