貪心演算法的分類
類中的建構函式以及new和delete
感悟1:追求最大利潤
這種題目的一般會有利潤和時間兩個變數:解決思想一般是兩種,第一種是求出最大的平均利潤,第二種是按**排序追求最大利潤。
在本週所做的b題屬於第二種,每個商品都有最晚賣出時間與利潤,每天只能賣乙個商品,而我在這個題中一開沒讀懂題意,認為每個商品只能在規定當天賣出,浪費了很多時間。
主要思路:先將他們按**排序,保證每次賣出的商品都是當前多能賣出商品的最大值。
主要**:
for
(i=1
;i<=n1;i++
)else}}
}
將每個賣過的天數進行標記,如果下乙個商品要在的當前賣出,就尋找它前面又沒有空餘時間。
本週所作的f題換咖啡豆的問題就屬於第一種,乙個房子中的每個房間都有咖啡豆,都需要用貓糧去換,而我們只要求出每個房間的單位貓糧的價值就行降序,就能保證我們現有的咖啡豆獲得最大的利益。
主要**:
while
(m>0)
else
//value就是單位價值
i++;}
2:區間問題
題目往往會給出很多區間,要求我們在區間會不干擾的情況下去完成問題。
例題:g桌子問題,,k看世界盃的問題,d填補空洞的問題,以及課上講的讀取整數區間問題;
g移桌子會在另一篇部落格中寫出。
k:在假期中在家看電視節目,每個節目都有起止時間,要求我們在互不干擾的情況下得出能看的最多節目。
思路:我們既然想看到最多的節目那第乙個節目肯定要為後面的節目留出時間,而它的起始時間又不能占用太多,於是這種情況下考慮將他們按結束時間進行公升序,如此我們可以保證每個節目的開始時間與終止時間都是最合適的。
核心**:
m[0]
.d=0
;sort
(m+1
,m+1
+n,cmp)
;for
(i=2
;i<=n;i++
)else
continue
;}
d:路上有一條小道,道上有很多的洞,每個洞都有起止距離,求出填上所有的洞所需要的最少木板。
思路:在這個題中,可以將路看為一條線,線上有幾個區間,我們考慮極端情況,板子很長乙個就可以覆蓋。先按距離從小到大排列,首先先使用乙個板子開始迴圈(要用初距離加上板長),然後開始迴圈,考慮到板子可能很長,先進行判斷,板子能蓋住多少與這個位置的終距離比較,若大contine,重要:否則比較板子與下乙個洞初距離的大小,取大的,這個可以成為後無效性。進行加板子迴圈(總長《此位置的y)
核心**:
sum1=p[1]
.x+l;sum2++
;for
(i=1
;i<=n;i++
)}
讀取整數區間:
1. 讀取閉區間的個數及它們的描述;
2.找到乙個含元素個數最少的集合,使得對於每乙個區間,都至少有乙個整數屬於該集合,輸出該集合的元素個數。
思路:按區間的上限進行公升序,首先選擇第乙個區間的上限數,進行區間移動,直到區間不包含這個數,進行迴圈。
主要**:
for
(int i=
1,x=-1
;i<=n;
++i)
3:不知道如何歸類的問題
i打牌問題:有n個人,每個人m張牌,牌的最大點數是n*m,沒個點數只有一張牌,要求我們算出最少能贏多少局。
思路:乙個人與其他n-1個人打牌,只要他們有一張牌大於我最大的牌,我就輸,否則我就贏。因此,我們應該有兩個陣列,乙個用來表示我的手牌,乙個用來表示其他人的牌。(如果直接用乙個陣列表示全部,可能會造成我的手牌打完後,又成為另外n-1人的手牌)
核心**:
#include
#include
#include
#include
using
namespace std;
bool
cmp(
int&a,
int&b)
intmain()
,b[51
],judge;
for(i=
1;i<=n;i++
)sort
(b+1
,b+1
+n,cmp)
;for
(i=1
;i<=n;i++)if
(judge==0)
} cout<<
"case "
<":"<<
" "<}return0;
}
預設建構函式:1.有預設值的建構函式。2.空的建構函式。
普通建構函式:帶有引數的建構函式,定義物件時需要自己傳引數。
類中只要有建構函式就不會自動生成預設建構函式,如果我們需要呼叫預設建構函式,就要自己定義乙個建構函式。
new使用
1.new 資料型別其中可以時變數或者常量。
2.new 資料型別
注意,new返回的是個函式,所以需要乙個指標變數儲存。
delete使用
1.int *p=new int;
delete p;
2.int *p;
p=new int[3];
delete p;
在類中如果用了new定義資料成員或成員函式,在析構函式中應將其刪除。如果用new定義了物件,要在外面用delete把物件刪除。
1.首先應該先把題意理解清楚,了解題目要求的輸入和輸出形式,注意空格,換行。
2.遇到題目沒有思路時,可以先用常規思路將它解出來,然後再用貪心思想進行優化。
3.如果題目沒有思路,可以將它化簡,去除一些限制條件,讓它成為之前做過的題目,然後再思考加上限制條件以後應該怎麼做。
4.
第二週學習總結
在本週,學習了物件導向的三大特徵,封裝,多型,繼承 讓我感覺到學習 的不易,基礎實在是很重要,現記錄本週學習過程 現的問題以及解決注釋。1.構造方法與成員方法的區別 成員方法 一般實現對類中成員變數的操作,提供某些功能,有返回值型別,通過物件呼叫!構造方法 一般是給物件的資料進行初始化,沒有返回值,...
第二週學習總結
一 棧和佇列的簡介 先進後出 限定性操作 棧具有後進先出的特性,如果問題解決具有先進後出的天然特性的話,則求解的演算法就要使用棧。先進先出 限定性操作 佇列具有先進先出的特性,如果問題解決具有先進先出的特性的話,則求解的演算法就要使用佇列。二 對棧和佇列的認識 棧 限制在表的一端進行插入和刪除運算的...
第二週學習總結
本週主要學習的是 1棧與佇列 2二分法 3位運算 首先要明白棧和佇列之間的區別,與棧相比佇列是先進先出的,先進去的就會先出來,而棧則與之不同,棧的進出順序與佇列不同並不是先進先出的有序關係,二十順序不定,候後進的可能先出。一般線性表 棧 邏輯結構 一對一 一對一 儲存結構 順序表 鍊錶 順序棧 鏈棧...