算法提高--接水問題
阿新 • • 發佈:2018-02-06
一行 sort names 計算方法 highlight 個數 pre space color
問題描述 有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; }
算法提高--接水問題