zoukankan      html  css  js  c++  java
  • 猫和胖老鼠

    FatMouse准备了M磅的Cat-Food,以便用来跟小Cat交换好吃的JavaBean。

    现在有N个房间,第i个房间有J[i]磅的JavaBean,其交换的筹码是F[i]磅的Cat-Food。

    当然,FatMouse还是有很大的选择权的,对任意一个房间,它可以只交换一部分的Cat-Food。

    现要求FatMouse以怎样的策略才能获得最多的Cat-Food。

    这也是一道简单 & 典型的贪心算法题,

    这道贪心比HDOJ-ACM-1052-Tian Ji — The Horse Racing:田忌赛马要简单许多,

    它的整体思路就是以javaBean/catFood比为基准,大比值房间优先。

    /*#include <stdio.h>
    
    int main()
    {
    int M,N;
    while(scanf("%d%d",&M,&N)!=EOF)
    {
    int i,j,J[1000],F[1000],temp1;
    double ratio[1000],JavaBeans=0,temp;
    if((M==-1)&&(N==-1))
    {
    return 0;
    }
    for(int i=0;i<N;i++)
    {
    scanf("%d%d",&J[i],&F[i]);
    ratio[i]=(J[i]*1.0)/F[i];
    }
    for(i=0;i<N;i++)
    {
    for(j=0;j<N-i-1;j++)
    {
    if(ratio[j]<ratio[j+1])
    {
    temp=ratio[j];
    ratio[j]=ratio[j+1];
    ratio[j+1]=temp;
    
    temp1=F[j];
    F[j]=F[j+1];
    F[j+1]=temp1;
    
    temp1=J[j];
    J[j]=J[j+1];
    J[j+1]=temp1;
    
    }
    }
    }
    for(i=0;i<N;i++)
    {
    if(M>=F[i])
    {
    JavaBeans=J[i]+JavaBeans;
    M=M-F[i];
    }
    else
    {
    JavaBeans=JavaBeans+ratio[i]*M;
    break;
    }
    }
    printf("%.3lf
    ",JavaBeans);
    }
    return 0;
    }*/
    
    
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int a[10010];
    int b[10010];
    double c[10010];
    int main ()
    {
    int m,n;
    while(scanf("%d%d",&m,&n)==2)
    {
    if (m==-1&&n==-1) {break;}
    for (int i=0; i<n; i++)
    scanf("%d%d",&a[i],&b[i]);
    for(int i=0; i<n; i++)
    {
    
    c[i]=(a[i]*1.0)/b[i];
    
    }double temp;int temp1;int temp2;
    for(int i=0; i<n; i++)
    {
    for(int j=0; j<n-i-1; j++)
    {
    if(c[j]<c[j+1])
    {
    temp=c[j];
    c[j]=c[j+1];
    c[j+1]=temp;
    
    temp1=a[j];
    a[j]=a[j+1];
    a[j+1]=temp1;
    temp2=b[j];
    b[j]=b[j+1];
    b[j+1]=temp2;
    }
    }
    }
    
    float s=0;
    for (int i=0; i<n; i++)
    {
    if(m>=b[i])
    {
    
    s=s+a[i];m=m-b[i];
    }
    else
    {
    s=s+(c[i])*m;
    break;
    }
    
    }
    printf("%.3f
    ",s);
    }
    return 0;
    }
    /*
    5 3
    7 2
    4 3
    5 2
    20 3
    25 18
    24 15
    15 10
    -1 -1*/
    

      

  • 相关阅读:
    java 堆栈 附图
    synchronized、volatile关键字
    Swift随笔
    java |、&、~、>>、<<运算符的作用。
    java双向链表示意图
    java单链表
    List集合的过滤之lambda表达式
    SQL hint作用
    创建触发器的一般语法
    多线程创建方式
  • 原文地址:https://www.cnblogs.com/SSYYGAM/p/4212511.html
Copyright © 2011-2022 走看看