背包问题 给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大? #include <iostream> #include<algorithm> #define n 6 using namespace std; float w[n]={2.0,2.0,6.0,5.0,4.0},v[n]={6.0,3.0,5.0,4.0,6.0}; float x[n]; void Knapsack(int N, float M, float v[],float w[],float x[]) { sort(v,v+N); sort(w,w+N); int i; for (i=1;i<=N;i++) x[i]=0; float c=M; for (i=1;i<=N;i++) { if (w[i]>c) break; x[i]=1; c-=w[i]; } if (i<=N) x[i]=c/w[i];//最后一个物品运行部分转入 } int main () {float m=10; Knapsack(n,m,v,w,x); cout<<m<<endl; for(int i=1;i<=n;i++) cout<<x[i]<<" "; return 0; } if (i<=n) x[i]=c/w[i];//最后一个物品运行部分转入 }