0-1揹包與完全揹包 SDNUOJ1033採藥(一維陣列)1043採藥2(一維陣列)
阿新 • • 發佈:2018-12-07
1033(一維陣列)(揹包容量 j 逆序列舉)0-1揹包
#include<iostream> #include<cstring> #include<cmath> using namespace std; #define N 1005 int v[N],w[N]; int m[N]; int main() { int c, n; while(cin >> c >> n) { for(int i = 1; i <= n; i++) { cin >> w[i] >> v[i]; } memset(m, 0, sizeof(m)); for(int i = 1; i <= n; i++) { for(int j = c; j >= w[i]; j--) { m[j] = max(m[j],m[j-w[i]] + v[i]); } } cout << m[c] << endl; } return 0; }
1043(揹包容量 j 順序列舉)完全揹包
#include<iostream> #include<cstring> #include<cmath> using namespace std; #define N 1005 int v[N],w[N]; int m[N]; int main() { int c, n; while(cin >> c >> n) { for(int i = 1; i <= n; i++) { cin >> w[i] >> v[i]; } memset(m, 0, sizeof(m)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= c; j++) { if(j >= w[i]) m[j] = max(m[j],m[j-w[i]] + v[i]); else m[j] = m[j - 1]; } } cout << m[c] << endl; } return 0; }