• HDU 1009 FatMouse' Trade 贪心题


    解题报告:

    大意:一只老鼠有M磅的猫粮,另外有一只猫控制了老鼠的N个房间,这些房间里面放了老鼠爱吃的绿豆,给出每个房间的绿豆数量,和这个房间的绿豆所需要的猫粮数,现在要求老鼠用这M磅的猫粮最多能换到多少它爱吃的绿豆?

    贪心题,由于所有的绿豆都是一样的,所以如果老鼠想要换到最多的绿豆,便可以换猫控制的房间里面最便宜的绿豆,也就是说先换取单位数量的绿豆所需要最少的猫粮的房间里的绿豆,这样就可以保证换到的绿豆是最多的。具体实现可以用一个结构体,里面保存每个房间里面有的绿豆的数量和换取这个房间的绿豆时所需要的猫粮的数量和换取这个房间的 单位重量的绿豆所需要的猫粮数(以下简称单价),然后再按照单价升序给这些结构体排一次序,这时就可以从最便宜的绿豆开始换了。

     1 #include<stdio.h>
     2 #include<algorithm>
     3 struct node {
     4     double j,f,velu;
     5 }java[1000+5];
     6 double M;
     7 int N;
     8 bool cmp(node a,node b) {
     9     return a.velu>b.velu;
    10 }
    11 int main() {
    12     while(scanf("%lf%d",&M,&N)&&!(M==-1||N==-1)) {
    13         double sum=0;
    14         for(int i=1;i<=N;++i) {
    15             scanf("%lf%lf",&java[i].j,&java[i].f);
    16             java[i].velu=1.0*java[i].j/java[i].f;
    17         }
    18         if(N>1)
    19         std::sort(java+1,java+N+1,cmp);
    20         for(int i=1;;++i) {
    21             if(N==0)
    22             break;
    23             if(M>=java[i].f) {
    24                 M-=java[i].f;
    25                 sum+=java[i].j;
    26             }
    27             else{
    28                 sum+=1.0*M*java[i].j/java[i].f;
    29                 break;
    30             }
    31         }
    32         printf("%.3lf\n",sum);
    33     }
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    .Net5 之 IHttpContextAccessor注册
    Oracle将两张表的数据插入第三张表且第三张表中不存在
    Git使用基础介绍
    Fork之后如何同步远程仓储和更新
    创建Oracle序列sequence
    Python语言规范
    Entity Framework Core Update Database
    OSI 7层模型(OSI 7 layer model)
    Expression<>, Func<>, Action<>的区别与联系
    .Net Core 项目部署在Linux下, 关闭Shell后项目会自动关闭的解决办法
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3078444.html
Copyright © 2020-2023  润新知