HDU 1009 FatMouse' Trade(贪心得模拟)
程序员文章站
2022-03-05 14:48:39
...
题目链接:https://vjudge.net/contest/309172#problem/C
解析:输入m和n(m个英镑,n个房间),接着n行,每行两个数j[i],f[i]。化f[i]的钱买到j[i]的东西,花完m,保证买到的j[i]的数量最大。(也可以用af[i]的单价买到aj[i]的数量)
联系生活实际:你可以想象一下,在生活中让你去买,你会怎么买?如果花相同单价的钱,你肯定想买的东西最多。所以贪心的思想就体现出来了。让每单位的钱买到的数量最多。即使最后的钱只够买一小部分,和所有的相比,这些钱也能买的数量最多。所有商品性价比排序。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Mi{
double j,f,p;
} nod[1001];
int cmp(Mi x,Mi y){
return x.p>y.p;
}
int main(){
int n,m;
double sum;
while(~scanf("%d %d",&m,&n)){ //m英镑,n个房间
sum=0;
if(m==-1&&n==-1)break;
for(int i=0; i<n; i++){
scanf("%lf %lf",&nod[i].j,&nod[i].f);
nod[i].p=nod[i].j/nod[i].f;//相当于单价
}
sort(nod,nod+n,cmp);
for(int i=0;i<n;i++){
if(m>nod[i].f){
sum+=nod[i].j;
m-=nod[i].f;
}
else{
sum+=nod[i].p*m;
break;
}
}
printf("%.3lf\n",sum);
}
return 0;
}
暑假集训拉开序幕
上一篇: python图像处理opencv笔记(二):视频基本操作
下一篇: [OpenGL]多视角漫游