貪心算法學習總結續

      貪心的原理簡單,使用方便。最近又做了幾道題鞏固,做一下解題總結。
      第一道題,貓糧換豌豆。貪心策略可類比於揹包問題,根據性價比降序排列,如果貓糧有剩餘就優先換性價比高的豌豆,當剩餘貓糧少於要求數時按比例兌換。       
        解題步驟:建立結構體數組,計算性價比,降序排序,判斷情況,累計貓糧。          
        第二題,打折促銷買三免一。貪心策略的關鍵是排序方式,只有按降序排序才能達到最大優惠,因爲當購買商品的數額不是三的倍數時就會留下1或2個無法優惠的,而降序排序可以保證剩下的是最便宜的。另外要注意清空動態數組。           
        解題步驟:建立動態數組,降序排序,從第三個元素開始,隔三加和。           
        第三題,奶牛叫。這道題最難的是如何降低時間複雜度,最簡單的方法就是暴力循環,累加任意兩元素之間的差。但是,不好意思(눈_눈)超時。所以這道題成功的轉型成找規律,幾經周折,還是借鑑了別人的。                   sum+=(n-1-i)*(v[n-1-i]-v[i]);          
      這就是整個題目最重要的部分,也是最不能理解的地方。唯有問一下老師了。         
      第四題,北大騎車的查理。初讀題目,覺得很是複雜,查理要來回倒騰,於是想着計算每一次交換時的時間,然後求和。後來才發覺查理一直跟的是速度最快的人,所以可以先排序,找出最快的人,然後計算其花費的時間,與出發時間相加求和即可。值得注意的是,當出發時間小於0時,無論速度快慢都與查理無關,因爲快了在到校之前查理趕不上,慢了趕不上查理。另外涉及到了一個很重要的函數ceil
      用 法: double ceil(double x);
      功 能: 返回大於或者等於指定表達式的最小整數頭文件:math.h說明:float ceil ( float value )返回不小於 value 的下一個整數,value 如果有小數部分則進一位。ceil() 返回的類型仍然是 float,因爲 float 值的範圍通常比 integer 要大。          
      用來取整。
      解題步驟:建立結構體數組,將出發時間小於零的置爲0,計算每個人到達目的地的時間,降序排序。                第五道題,最大銷售利潤。貪心策略是將利潤最大的商品放到保質期的最後一天售賣,先賣利潤較低的。利用數組元素是否爲零判斷當天是否售賣過商品,利用保質期自減操作數組腳標。          
      解題步驟:建立結構體數組和普通數組並將普通數組初始化爲0(表示當天沒有售賣過商品)升序排序,從保質期最多的一天開始依次累加。          明天上課,聽老費講題,期待(๑˙ー˙๑)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章