揹包問題+尤拉函式
阿新 • • 發佈:2018-11-14
揹包問題可以分為
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];//這個是專門放素數的陣列 intmain() { 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的最小質因數*/
這幾天有點水。。。。。。。。。