题目:http://acm.hdu.edu.cn/showproblem.php?pid=2111
题意:知道背包容量和物品单价、体积。问能买到的最大价值?
注意:单价指的是单位体积的价格
思路:先把单价由高到低排序,然后从单价高的商品开始买
代码:
#include<iostream> #include<algorithm> using namespace std; struct item { int pi,mi; }I[101]; bool cmp(item a,item b) { return a.pi>b.pi; } int main() { int v,n; while(scanf("%d %d",&v,&n)!=EOF&&v) { for(int i=0;i<n;i++) scanf("%d%d",&I[i].pi,&I[i].mi); sort(I,I+n,cmp); int value=0; for (int i=0;i<n&&v;i++){ if (v>=I[i].mi){ v-=I[i].mi; value+=I[i].mi*I[i].pi; } else { value+=I[i].pi*v; v=0; } } cout<<value<<endl; } }