P2240 【深基12.例1】部分背包问题 贪心
P2240 【深基12.例1】部分背包问题
按价值比从大到小排序,每次选择价值比大的全部物品,或按比例选取部分物品直到背包为空为止。
#includeusing namespace std; struct node{ int zl; int jz; bool operator<(const node &n) const{ return float(jz)/zl>float(n.jz)/n.zl; } }; vector wp; int main() { int n,t; cin>>n>>t; float ans=0; for (int i=1;i<=n;i++) { node m; cin>>m.zl>>m.jz; wp.push_back(m); } sort(wp.begin(),wp.end()); for (int i=0;i =wp[i].zl) { ans+=wp[i].jz; t=t-wp[i].zl; } else{ ans+=(float)wp[i].jz/wp[i].zl*t; t=0; } } printf("%0.2lf",ans); return 0; }