E08【模板】背包DP 01背包
E08【模板】背包DP 01背包_哔哩哔哩_bilibili
P2871 [USACO07DEC] Charm Bracelet S - 洛谷
$f_{i,j}$ 表示前 $i$ 个物品,容量为 $j$ 的背包所能达到的最大价值
$$f_{i,j} =max(f_{i-1,j},f_{i-1,j-v_i}+w_i) $$
可以用滚动数组 或 逆序枚举 $j$,去掉第一维,
$$f_{j} =max(f_{j},f_{j-v_i}+w_i) $$
// 空间未优化 MLE #include<bits/stdc++.h> using namespace std; const int N=3410,M=13000; int n,m; int v,w,f[N][M]; int main(){ scanf("%d%d",&n,&m); for(int i=1; i<=n; i++){ //枚举物品 scanf("%d%d",&v,&w); for(int j=1; j<=m; j++){ //枚举体积 if(j<v) f[i][j]=f[i-1][j]; else f[i][j]=max(f[i-1][j],f[i-1][j-v]+w); } } printf("%d\n",f[n][m]); }
// 滚动数组优化空间 #include<bits/stdc++.h> using namespace std; const int N=3410,M=13000; int n, m; int v,w,f[2][M]; int main(){ scanf("%d%d",&n,&m); for(int i=1; i<=n; i++){ //枚举物品 scanf("%d%d",&v,&w); for(int j=1; j<=m; j++){ //枚举体积 if(j<v) f[i&1][j]=f[i-1&1][j]; else f[i&1][j]=max(f[i-1&1][j],f[i-1&1][j-v]+w); //奇偶滚动 } } printf("%d\n",f[n&1][m]); }
// 逆序枚举,优化空间 #include<bits/stdc++.h> using namespace std; const int M=13000; int n,m; int v,w,f[M]; int main(){ scanf("%d%d",&n,&m); for(int i=1; i<=n; i++){ //枚举物品 scanf("%d%d",&v,&w); for(int j=m; j>=v; j--){ //枚举体积 f[j]=max(f[j],f[j-v]+w); } } printf("%d\n",f[m]); }
#include<bits/stdc++.h> using namespace std; const int N=1010; int n,m; int v,w,f[N]; int main(){ scanf("%d%d",&m,&n); for(int i=1; i<=n; i++){ //枚举物品 scanf("%d%d",&v,&w); for(int j=m; j>=v; j--){ //枚举体积 f[j]=max(f[j],f[j-v]+w); } } printf("%d\n",f[m]); }
P1049 [NOIP 2001 普及组] 装箱问题 - 洛谷
#include<bits/stdc++.h> using namespace std; int m,n; int v,f[20005]; int main(){ scanf("%d%d",&m,&n); for(int i=1;i<=n;i++){ scanf("%d",&v); for(int j=m;j>=v;j--){ f[j]=max(f[j],f[j-v]+v); } } printf("%d\n",m-f[m]); }
P1060 [NOIP 2006 普及组] 开心的金明 - 洛谷
#include<bits/stdc++.h> using namespace std; int n,m; int v,w,f[30005]; int main(){ scanf("%d%d",&m,&n); for(int i=1; i<=n; i++){ //枚举物品 scanf("%d%d",&v,&w); w*=v; for(int j=m; j>=v; j--){ //枚举体积 f[j]=max(f[j],f[j-v]+w); } } printf("%d\n",f[m]); }
P2639 [USACO09OCT] Bessie's Weight Problem G - 洛谷
动态规划——01背包问题_动态规划01背包问题-CSDN博客
每周一算法:背包问题(五)求解方案数_背包问题求方案数-CSDN博客
背包九讲——背包问题求方案数_1.给定n种物品和一个背包。物品i的重量是w[i],其价值为v[i],背包的容量为c。应如-CSDN博客
浙公网安备 33010602011771号