0/1揹包問題: 給定容量v的揹包,現在有多個物品要放入揹包,每個物品有一定的體積和價值,要求在揹包可以放下的情 況下放入的物品的總價值最大(下面給的裝箱問題其實也一樣的,求總空間最小,其實可以理解為求裝入的物品的體積最大化,那麼把物品的價值賦值為體積,求體積最大也就是求價值最大!)!
(部分揹包問題):貪心
對於部分揹包問題,因為物品可以放一部分,而不是必須整體放入。所以可以直接用貪心演算法是可以直接解出來的。什麼是貪心演算法?通俗地講就是選擇的每一步都是最優的。
(全部揹包問題):動態規劃
演算法訓練 裝箱問題
時間限制:1.0s 記憶體限制:256.0mb
問題描述
有乙個箱子容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30),每個物品有乙個體積(正整數)。
要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。
輸入格式
第一行為乙個整數,表示箱子容量;
第二行為乙個整數,表示有n個物品;
接下來n行,每行乙個整數表示這n個物品的各自體積。
輸出格式
乙個整數,表示箱子剩餘空間。
樣例輸入
24 6
8 3
12 7
9 7
樣例輸出 0
//全部揹包問題
#include#include#include#include#include#includeusing namespace std;
int volume[30]; int need[30];//容量和需求度(價值)陣列
int cache[40000][30];//剛好寫成20000就出錯了
int package(int capacity,int item)
int &ret = cache[capacity][item];//動態規劃固定的寫法
if (ret!=0)
//不放入
ret=package(capacity, item - 1);
//放入(忘記考慮容量這個條件了)
if (capacity>=volume[item])
return ret;
}int main()
cout << ca-package(ca,n-1) << endl;
return 0;
}
選法應該是2^n次方(即每個物品都是選或者不選的區別) 藍橋 K好數 動態規劃
題目描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。輸入 輸入包含兩個...
藍橋杯 對局匹配 動態規劃
時間限制 1.0s 記憶體限制 256.0mb 問題描述 輸入格式 第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 對於100 的資料,1 n 100000,0 ai 100000,0 k 100000 輸出格式 乙個整數,代表答案。樣例輸入 10 0...
壘骰子動態規劃 藍橋杯
壘骰子 賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。經過長期觀察,atm 發現了穩定骰子的奧秘 有些數字的面貼著會互相排斥!我們先來規範一下骰子 1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起...