有n個人在乙個水龍頭前排隊接水,假如每個人接水的時間為ti,
請程式設計找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。
貪心策略:
第1個人的等待時間為0,第二個人的等待的時間為t[1],第三個人的等待時間為t[1]+t[2]
第n個人的等待時間為前n-1個人接水的時間之和,所以將n個人的接水時間從小到大排序
這就是n個人排隊的順序,使得n個人的平均等待時間最小
#includeusing namespace std;
const int max=1e5+5;
int t[max],n;
int main()
int tim[101000];
int main()
long long sum=0;
while(q.size()>1)
cout<
#include#include#includeusing namespace std;
int main()
long long sum=0;
make_heap(v.begin(),v.end(),greater());
while(v.size()>1)
cout<
描述:設有n個正整數,將它們聯接成一排,組成乙個最小(最大)的多位整數。
程式輸入:n個數程式輸出:聯接成的多位數例如:n=2時,2個整數32、321連線成的最小整數為:32132
n=3時,3個整數13,312,343,連成的最大整數為34331213。
n=4時,4個整數7,13,4,246連線成的最大整數為7424613。
n=4時,4個整數55、31、312、33 聯接成的最小整數為:312313355
思路:兩個方向:a.先組合,後排序,b.先排序,後組合,但是要注意:a=』321』,b=』32』,
按照標準的字串比較規則因為a>b,所以a+b > b+a ,而實際上』32132』 < 』32321』。
所以,自定義一種字串的比較規則:
即如果a+b>b+a,則我們認為a>b。
#includeusing namespace std;
bool cmp(string a,string b)
int main()
sort(v.begin(),v.end(),cmp);
for(int i=0;i一些在時間上沒有重疊的事件,可以構成乙個事件序列,如事件。
事件序列包含的事件數目,稱為該事件序列的長度。請程式設計找出乙個最長的事件序列。
用begin[i],end[i]表示事件i的開始時刻和結束時刻,
則問題轉化為求 a1
#include #include using namespace std;
struct node
a[105];
int cmp(node u,node v)
//對節目按照結束時間從小到大排序,
//如果結束的時間相同,則按照開始的
} printf("%d\n",k);//k代表能看的電視的個數!
} return 0;
}
hdu 4221 貪心
給n個活動,每個活動需要一段時間c來完成,並且有乙個截止時間d,
當完成時間t大於截止時間完成時,會扣除t-d分,
讓你找出如何使自己所扣分的最大值最小。
#include#includeusing namespace std;
const int max=1e6+5;
struct nodea[max];
bool cmp(node a,node b)
a[max];
bool cmp(node a,node b)
sort(a+1,a+1+n,cmp);
for(int i=0;i<=n;i++)
printf("%i64d\n",ans);
return 0;
}
演算法競賽入門與高階 (四)二分
在乙個單調有序的集合中查詢元素,每次將集合分為左右兩部分,判斷解在哪個部分中並調整集合上下界,重複直到找到目標元素。例如 在以下序列中查詢55 binary search 返回bool值 判斷查詢元素是否存在 lower bound 返回可插入的最小位置的迭代器 即返回第乙個符合條件的元素位置 up...
三 演算法入門分析 貪心演算法
所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備無後效性,...
演算法競賽入門 洪水
題目意思大概就是,有n m個底面積為10 10的格仔,每個格仔內有各種不同高度的柱子,再有乙個降雨量,來填這些格仔,輸出水面高度,和被淹沒於沒被淹沒的比例。include include include include using namespace std intmain 輸入n m個數,可以看成...