完全揹包與01揹包相比,最大的差別在於完全揹包中的任意揹包有多種選擇(0,1,2,3,4,5),而01揹包要求的選擇有(0,1)兩種,所以在尋找狀態轉移方程是01揹包問為
i(1-->n)
j(v->0)
f[j]=max(f[j],f[j-a[i].w]+a[i].p);
這樣保證了每個揹包選擇一次或者0次;
而完全揹包狀態轉移方程是
i(1-->n)
j(0->v)
f[j]=max(f[j],f[j-a[i].w]+a[i].p);
這樣保證了每個包有多次選擇;
此題的思路:用完全揹包找到最小值,同時要求是否可能;
1,把dp陣列初始化,必須是dp[0]=0;其他的是maxn;
2,用狀態轉移方程找出最小的數dp[e],如果為初始化數時,則為不存在此數;
其中dp[0]=0;很重要,我就是沒想出這一步錯的;
考察點:完全揹包的最小值應用;
提交:我錯了好幾次,最後看別人的**看懂的;
經驗:會求出玩全揹包最小值的求解,
#include
#include
#include
#include
using namespace std;
int dp[100000];
int n;
int e,f;
struct ele
a[100000];
int main()
return 0;
}
POJ 1384 完全揹包
題意 給定乙個重量,和各種錢幣的重量,求可以滿足給定重量的錢幣組合中的最小組合。如果存在組合就求出最小值。轉移方程 1 f j 和 f j w i 都可達 則 f j min 2 f j 不可達 但 f j w i 可達 則 f j f j w i p i 3 其餘情況 則不作處理 程式 inclu...
poj 1384完全揹包
題意 給出豬罐子的空質量和滿質量,和n個硬幣的價值和質量,求豬罐子剛好塞滿的的最小價值。思路 選擇硬幣,完全揹包問題,塞滿 初始化為無窮,求最小價值,min。include include includeusing namespace std define inf 10000000 int n,su...
POJ 1384 完全揹包
題意 已知儲蓄罐滿時的質量f以及空時質量e,有n種硬幣,每種硬幣的價值為p,質量為w,求該儲蓄罐中的最少有多少錢?思路 完全揹包思想,問題是在乙個重量下的最小價值 那麼只要變一下符號就好了?include include include include include using namespace...