2111 ACM 贪心 水题

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2111

题意:知道背包容量和物品单价、体积。问能买到的最大价值?

注意:单价指的是单位体积的价格

思路:先把单价由高到低排序,然后从单价高的商品开始买

代码:

#include<iostream>
#include<algorithm>
using namespace std; struct item
{
int pi,mi;
}I[]; 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=;i<n;i++)
scanf("%d%d",&I[i].pi,&I[i].mi);
sort(I,I+n,cmp);
int value=;
for (int i=;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=;
}
}
cout<<value<<endl;
}
}
上一篇:python之加密


下一篇:Java Swing 编程 JComboBox 显示不全问题。