1. 程式人生 > >揹包問題+尤拉函式

揹包問題+尤拉函式

揹包問題可以分為

0-1揹包(每件物品都只有一件)

完全揹包(每件物品都有無數件)

多重揹包(每件物品可以有多件)

當然,我們的 揹包 肯定是有 容量大小的(看題目規定或者自己輸入)。

首先推薦一下0-1揹包問題的解析 https://blog.csdn.net/AC__GO/article/details/76918559

然後再解決一下我自己當時有點迷糊的點

0-1揹包 的思路其實就是這樣

 

當前揹包的容量能不能放的下當前物品

如果能

要放下當前物品要執行什麼操作(要不要拿出來之前放的物品)

執行完操作

放入當前物品後的總價值    是否大於  不放入當前物品的總價值

按照這個思路去看上面推薦的解析應該就能明白了。。。。。。。

——————————————————————————————————————————————————————————————————————————————————————————

本來一直都是用打表,今天被一道題卡超時,沒辦法就學了下,發現沒那麼難。

#include<iostream>
using namespace std;
#define inf 1000005
int num[inf];//這個是所有數的陣列,等於0就代表為素數,等於1就代表合數
int book[inf];//這個是專門放素數的陣列
int
main() { int n, t = 1;//n是範圍,t=1是因為 素數的陣列 要用 cin >> n;//讀入範圍 for (int i = 2; i <= n; i++) {//開始遍歷 if (num[i] == 0) { book[t++] = i; }//如果這個數是素數,那就放入素數的陣列 for (int j = 1; j < t && (book[j]*i<inf); j++) { num[i*book[j]] = 1;//當前數*素數=一個合數 把這個合數標記為1 代表是合數
if (!(i % book[j])) { break; }//如果找到了自己的最小質因數,那就跳出 } } } /*數學小知識:每一個合數 都至少整除 一個素數 比如 6能整除2 那麼2就是6的最小質因數*/

這幾天有點水。。。。。。。。。