代码一:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//背包问题 #include<iostream> #include<vector> #include<algorithm> using namespace std; struct node{ double w; double p; double t; }; int cmp(const node &a,const node &b){ return a.t>b.t; } int main(){ vector<node> str; double weight,price=0; double wei=0; node b; int n; while(cin>>n>>weight){ for(int i=0;i<n;i++) { cin>>b.p>>b.w; b.t=b.p/b.w; str.push_back(b); } sort(str.begin(),str.end(),cmp); vector<node>::iterator it; // for(it=str.begin();it!=str.end();it++) cout<<(*it).p<<" "<<(*it).w<<endl; for(it=str.begin();it!=str.end();it++){ if(wei+(*it).w<=weight) { wei+=(*it).w; price+=(*it).p; } } cout<<price<<endl; } }
测试数据:结果为220
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
5 50 60 10 100 20 120 30 30 10 40 20
代码二:结果为240
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//背包问题 #include<iostream> #include<vector> #include<algorithm> using namespace std; struct node{ double w; double p; double t; }; int cmp(const node &a,const node &b){ return a.t>b.t; } int main(){ vector<node> str; double weight,price=0; double wei=0; node b; int n; while(cin>>n>>weight){ for(int i=0;i<n;i++) { cin>>b.p>>b.w; b.t=b.p/b.w; str.push_back(b); } sort(str.begin(),str.end(),cmp); vector<node>::iterator it; // for(it=str.begin();it!=str.end();it++) cout<<(*it).p<<" "<<(*it).w<<endl; for(it=str.begin();it!=str.end();it++){ if(wei>=weight) break; if(wei+(*it).w<=weight) { wei+=(*it).w; price+=(*it).p; } else { price+=(*it).p*(weight-wei)/(*it).w; wei=weight; } } cout<<price<<endl; } }