貪心演算法 揹包問題

2021-07-26 11:53:12 字數 1472 閱讀 9506

在之前的《演算法設計與分析》課程的學習中,我們就接觸到了貪心演算法解決揹包問題,當然還有動態規劃法解決0-1揹包問題等等。今天我就來分析貪心法解決揹包問題。為了大家可以理解貪心演算法,我先分享一道比較簡單的題目。

給你乙個非負數整數n,判斷n是不是一些數(這些數不允許重複使用,且為正數)的階乘之和,如9=1!+2!+3!,如果是,則輸出yes,否則輸出no;

第一行有乙個整數0

看到這個問題,我並不是一下子就想到了解決辦法,只是參考一些資料。列出前9個數字的階乘。儲存在乙個陣列中,為什麼是前9個數呢?因為n<1000000,而9的階乘就是362880,10!一定大於1000000.具體實現辦法:每次都從9的階乘開始(也就是陣列的最後乙個數字),如果給出的n大於陣列的當前數字,則n減去當前數字;如果n小於當前數字,則遍歷陣列前邊的數字,直到n為0或者是已經到達陣列的開始就退出迴圈.

#include

using

namespace

std;

bool issum(int num)

; int index = 8;

while (num > 0 && index >= 0)

if (num == 0)

return

true;

else

return

false;

}int main()

else

cout

<< "no"

<< endl;

}system("pause");

return

0;}

從上邊的題目,我們大致就可以知道貪心的思想–今朝有酒今朝醉。下邊我們來分析揹包問題。

#include

using

namespace

std;

#include

#include

//揹包問題

struct object

;bool compare(const object& l, const object& r)

void knapsack(object objects, int n,int capacity)

else

//裝不下一整件物品的情況

}printf("揹包所能裝物品的價值總和為:%d\n", value);

}int main()

sort(objects, objects + nobjects, compare);

knapsack(objects, nobjects,capacity);

delete objects;

system("pause");

return

0;}

執行結果

揹包問題(貪心演算法)

揹包問題 程式8 4 2.cpp 定義控制台應用程式的入口點。揹包問題 貪心演算法 include stdafx.h define maxnumber 20 typedef struct node object float find object wp,int n,float m i 0 while...

貪心演算法 揹包問題

詳細見原帖 我寫的是自己的感悟 揹包問題 有乙個揹包,揹包容量是m 150。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。物品 a b c d e f g 重量 35 30 60 50 40 10 25 價值 10 40 30 50 35 40 30 ...

貪心演算法 揹包問題

貪心演算法 當前最優解 例如在刪除數的乙個例子中,乙個長度不大於240位的整數中,隨機刪除n個數,要求使得剩餘的數 從左到右的,組成乙個最小的整數 貪心步驟 例如 乙個數 1457326 n 4 1 找到當前最大的數 7 刪除 145326 2 找到當前最大的數 6 刪除 14532 3 找到當前最...