01背包问题
dfs解法
1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cmath> 5 6 using namespace std ; 7 8 const int N = 1010 ; 9 10 int v[N],w[N] ; 11 int n,V ; 12 int ans = 0 ; 13 14 void dfs(int idx,int h,int m){ 15 if(idx == n){ 16 return ; 17 } 18 dfs(idx+1,h,m) ;//第一个分支表示不选当前物品 19 if(h+v[idx]<=V){//只有当前背包容量大于等于当前物品体积,才进入第二个分支 20 if(ans<m+w[idx]){ 21 ans = m + w[idx] ; 22 } 23 dfs(idx+1,h+v[idx],m+w[idx]) ; 24 } 25 } 26 27 int main(){ 28 cin >> n >> V ; 29 30 for(int i=0;i<n;i++){ 31 cin >> v[i] ; 32 } 33 for(int i=0;i<n;i++){ 34 cin >> w[i] ; 35 } 36 37 dfs(0,0,0) ; 38 39 cout << ans << endl ; 40 41 return 0 ; 42 }
...