4种写法:
背包0-1 #include <iostream> using namespace std; int w[101] = {0}, c[101] = {0}, dp[101][101] = {0}; int main(){ int n, v; cin >> n >> v; for(int i = 1; i <= n; i++){ cin >> w[i] >> c[i]; } for(int i = 1; i <= n; i++){ for(int j = v; j > 0; j--){ if(w[i] <= j){ dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + c[i]); }else{ dp[i][j] = f[i-1][j]; } } } cout << dp[n][v] << endl; return 0; } ------------------------------------------------------ #include <iostream> using namespace std; int w[101] = {0}, c[101] = {0}, dp[101] = {0}; int main(){ int n, v; cin >> n >> v; for(int i = 1; i <= n; i++){ cin >> w[i] >> c[i]; } for(int i = 1; i <= n; i++){ for(int j = v; j >= w[i]; j--){ if(dp[j-w[i]] + c[i] > dp[j]){ dp[j] = dp[j-w[i]] + c[i]; } } } cout << dp[v] << endl; return 0; } ----------------------------------------------------------------------- 完全背包问题 #include <iostream> using namespace std; int w[101] = {0}, c[101] = {0}, dp[101][101] = {0}; int main(){ int n, v; cin >> n >> v; for(int i = 1; i <= n; i++){ cin >> w[i] >> c[i]; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= v; j++){ if(w[i] <= j){ dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + c[i]); }else{ dp[i][j] = dp[i-1][j]; } } } cout << dp[n][v] << endl; return 0; } --------------------------------------------------------------- #include <iostream> using namespace std; int w[101] = {0}, c[101] = {0}, dp[101][101] = {0}; int main(){ int n, v; cin >> n >> v; for(int i = 1; i <= n; i++){ cin >> w[i] >> c[i]; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= v; j--){ if(w[i] <= j){ dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + c[i]); }else{ dp[i][j] = dp[i-1][j]; } } } cout << dp[n][v] << endl; return 0; } -------------------------------------------------------------- #include <iostream> using namespace std; int w[101] = {0}, c[101] = {0}, dp[101][101] = {0}; int main(){ int n, v; cin >> n >> v; for(int i = 1; i <= n; i++){ cin >> w[i] >> c[i]; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= v; j--){ if(w[i] <= j){ dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + c[i]); }else{ dp[i][j] = dp[i-1][j]; } } } cout << dp[n][v] << endl; return 0; } 还差一种编译不过 #include <bits/stdc++.h> using namespace std; int w[101] = {0}, c[101] = {0}, dp[101][101] = {0}; int main(){ int n, v; cin >> n >> v; for(int i = 1; i <= n; i++){ cin >> w[i] >> c[i]; } for(int i = 1; i <= n; i++){ for(int j = w[i]; j <= v; j++){ dp[j] = max(dp[j], dp[j-w[i]] + c[i]); } } cout << dp[v] << endl; return 0; }
背包问题 DP
最新推荐文章于 2023-10-08 20:29:19 发布