ACM寒假集訓第二天 揹包九講

2021-09-09 07:27:51 字數 2188 閱讀 5368

揹包:01揹包優化、完全揹包、多重揹包

01揹包(zeroonepack): 有total件物品和乙個容量為weight的揹包。(每種物品均只有一件)第i件物品的費用是w[i],價值是v[i]。求解將哪些物品裝入揹包可使價值總和最大。

完全揹包(completepack): 有total種物品和乙個容量為weight的揹包,每種物品都有無限件可用。第i種物品的費用是w[i],價值是v[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

多重揹包(multiplepack): 有total種物品和乙個容量為weight的揹包。第i種物品最多有n[i]件可用,每件費用是w[i],價值是v[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

比較三個題目,會發現不同點在於每種揹包的數量,01揹包是每種只有一件,完全揹包是每種無限件,而多重揹包是每種有限件。

01揹包:

有n件物品和乙個容量為v 的揹包。放入第i件物品耗費的空間是ci,得到 的價值是wi。求解將哪些物品裝入揹包可使價值總和最大。

狀態轉移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]); 

#include #include #include const int max = 1e3 + 5;

int w[max], v[max], dp[max];

using namespace std;

int main()

for (int i = 1; i <= total; i++)

}cout << dp[weight] << endl;

return 0;

}

完全揹包:

有n種物品和乙個容量為v 的揹包,每種物品都有無限件可用。放入第i種 物品的耗費的空間是ci,得到的價值是wi。求解:將哪些物品裝入揹包,可使 這些物品的耗費的空間總和不超過揹包容量,且價值總和最大。

狀態轉移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-k*w[i]]+k*v[i]);

與01揹包的區別只有第二層for迴圈,   01揹包從w[i]到weight,完全揹包從weight到w[i]。因為k可以被優化掉。

#include #include #include const int max=1e3+5;

int w[max],v[max],dp[max];

using namespace std;

int main()

int k=1;

for(int i=1;i<=total;i++)

k++;

} cout《優化後:

#include #include #include const int max = 1e3 + 5;

int w[max], v[max], dp[max];

using namespace std;

int main()

for (int i = 1; i <= total; i++)

}cout << dp[weight] << endl;

return 0;

}

多重揹包:

狀態轉移方程:f[i][j]=max(dp[i-1][j],dp[i-1][j-k*w[i]]+k*v[i](0<=k<=kmax));

有一種思路,將多件物品轉換為多件數量為一的物品,例如 1 2 2變為 1 2 1 ,1 2 1

#include #include #include using namespace std;

const int max=1e5+5;

int v[max],w[max],num[max],dp[max];

int main()

int k=total+1;

for(int i=1;i<=total;i++) }

for(int i=1;i<=k;i++) }

cout

}

寒假集訓第二天

程式與程序 程式是放到磁碟的可執行檔案,程序是執行程式的例項。程式是靜態的,程序是動態的。程式是有序 的集合,程序是程式的執行。通常程序不可在計算機之間遷移,而程式對應的是檔案,靜態,可以複製。ps elf 類似任務管理器 開啟所有程序。ctrl z 後台執行程序 fg 將後台切到前台 ps elf...

寒假集訓第二天 貪心 Saruman s Army

問題解析 給出數軸上的一些點代表可放置的位置,給出裝置的覆蓋範圍 覆蓋的半徑 求出最少用多少個裝置能把所有給出的位置全部覆蓋.貪心問題 從乙個未覆蓋的位置向前遍歷,找到滿足距離小於 r 的最右邊的點,這個點一定作為乙個裝置的放置位置,然後從這個位置找到右邊的最小的不能覆蓋到的位置,這個位置作為下一次...

集訓第二天

程序與程式的區別 1 程序是程式及其資料在計算機的一次執行活動,是乙個執行過程,是乙個動態的概念。程序的執行實體是程式,離開程式的程序沒有存在的意義。而程式是一組有序的指令集合,是一種靜態概念。2 程序是程式的一次執行過程,它是動態地建立和消亡的,具有一定的生命週期,是暫時存在的 而程式則是一組 的...