#include<iostream> using namespace std; #define MAXLEN 10 void Sort(int n,float v[],float w[]){ for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++){ if(v[j]/w[j]>=v[i]/w[i]){ swap(v[i],v[j]); swap(w[i],w[j]); } } } void Knapsack(int n,float M,float v[],float w[],float x[]) { Sort(n,v,w); 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 v[MAXLEN]={0,60,120,50},w[MAXLEN]={0,20,30,10}; float x[MAXLEN]; float M=50; int n=3; Knapsack(n,M,v,w,x); cout<<"最大值:"<<v[1]*x[1]+v[2]*x[2]+v[3]*x[3]<<endl; return 0; }