• 算法提高--接水问题


    问题描述
      有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;
    }
    

      

  • 相关阅读:
    jsp登录显示
    flask 分页
    module pip has no attribute main
    html active属性
    Centos7配置
    python爬虫笔记----4.Selenium库(自动化库)
    python爬虫笔记
    python报错记录
    mybatis逆向文件
    python简单验证码
  • 原文地址:https://www.cnblogs.com/jweie/p/8423573.html
Copyright © 2020-2023  润新知