4-1 程式儲存問題
設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1≤i≤n。 程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案, 使得能夠在磁帶上儲存盡可能多的程式。 對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。
第一行是2 個正整數,分別表示檔案個數n和磁帶的長度l。接下來的1行中,有n個正整數,表示程式存放在磁帶上的長度。
輸出最多可以儲存的程式數。
在這裡給出一組輸入。例如:
6 50
2 3 13 8 80 20
在這裡給出相應的輸出。例如:
5
#include#includeusing namespace std;
int main()
sort(l,l+n);
int sum=0;
int count=0;
for (int i=0;il) break;
count++;
}cout《由小到大將程式的長度存放進磁帶,直到磁帶長度不夠為止,此時可以存放的程式個數為最大值。
**中有兩個for迴圈,時間複雜度都為o(n),由於使用了sort函式將陣列公升序排序,而sort函式的時間複雜度為o(n*logn),所以演算法的時間複雜度為o(n*logn)。
對於許多最優化問題,使用動態規劃法來求最優解有些殺雞用牛刀了,這時若能使用貪心演算法,便可以解決問題更加簡單、更加高效。貪心演算法的每一步都做出區域性問題的最優選擇,若區域性問題的最優解能導致全域性最優解,那麼使用貪心演算法可以簡單高效的得到問題答案。
但是貪心演算法有侷限性,它並不適用於所有問題,使用貪心演算法的問題需要滿足貪心選擇性質和最優子結構性質:即對於乙個具體問題,必須證明每一步所作的貪心選擇最終導致問題的整體最優解,且問題的最優解需要包含其子問題的最優解。
運用貪心演算法解決問題時,最重要的是如何制定最為合適的貪心策略,以確保每一步都能求解到最優解,從而才能得到整個問題的最優解。
貪心演算法不僅僅對解決演算法題目時有著巨大的幫助,在實際生活中,為獲得最大效益,人們也在不停地在使用著貪心策略,因此學好貪心演算法對學習和生活都有著巨大的幫助,因此以後要更加認真的學習貪心演算法,以豐富學識,便利生活。
演算法第四章上機實踐報告
1.實踐題目 4 1 程式儲存問題 設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1 i n。程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案,使得能夠在磁帶上儲存盡可能多的程式。對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。2.問題描述 在...
演算法第四章上機實踐報告
引論 相比與動態規劃演算法,貪心演算法是比較容易理解的,其思想就在於得到當前狀態下區域性最好選擇,當乙個問題的最優解包含其子問題的最優解時,即每個貪心選擇都是子問題的最優解,那麼就能的到該問題的最優解了。本次上機實踐的題目雖然不是特別難,但相比前兩次,這一次上機實踐的效率遠低於上兩次,因為在實踐的時...
第四章演算法上機實踐報告
第四章演算法上機實踐報告 實踐題目 設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1 i n。程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案,使得能夠在磁帶上儲存盡可能多的程式。對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。輸入格式 第一行...