• ZOJ Problem Set


    ZOJ Problem Set - 2109
    FatMouse' Trade

    Time Limit: 2 Seconds                                     Memory Limit: 65536 KB                            

    FatMouse prepared M pounds of cat food, ready to trade with the cats guarding   the warehouse containing his favorite food, JavaBean.
      The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and   requires F[i] pounds of cat food. FatMouse does not have to trade for all the   JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he   pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning   this homework to you: tell him the maximum amount of JavaBeans he can obtain.


    Input

      The input consists of multiple test cases. Each test case begins with a line   containing two non-negative integers M and N. Then N lines follow, each contains   two non-negative integers J[i] and F[i] respectively. The last test case is   followed by two -1's. All integers are not greater than 1000.


    Output

      For each test case, print in a single line a real number accurate up to 3 decimal   places, which is the maximum amount of JavaBeans that FatMouse can obtain.


      Sample Input


      5 3
      7 2
      4 3
      5 2
      20 3
      25 18
      24 15
      15 10
      -1 -1


    Sample Output

      13.333
      31.500

    明显的贪心算法

    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct St{
    	int j,f;
    	double jpf;
    }; 
    bool cmp(St a,St b)
    {
    	return a.jpf>b.jpf;
    }
    int main()
    {
    	int m,n;
    	while(cin>>m>>n)
    	{
    		if(m==-1&&n==-1)break;
    		St s[1001];
    		for(int i=0;i<n;i++)
    		{
    			 cin>>s[i].j>>s[i].f;
    			 s[i].jpf=s[i].j/(double)s[i].f; 
    		}
    		sort(s,s+n,cmp);
    		double sum=0.0; 
    		for(int i=0;i<n;i++)
    		{
    			if(m>s[i].f)
    			{
    			   sum+=s[i].j;
    			   m-=s[i].f;
    			}
    			else if(m>0)
    			{
    				sum+=s[i].j*(m/(double)s[i].f);
    				m=0;
    				break;
    			}
    		}
    		printf("%.3f
    ",sum);
    	}
    } 


     

  • 相关阅读:
    015-面向对象
    017-错误和异常
    019-File
    020-OS
    021-模块
    022-标准库
    数据库目录
    数据库 概念详解
    MySQL 基础
    MySQL 数据库操作
  • 原文地址:https://www.cnblogs.com/jackwuyongxing/p/3366502.html
Copyright © 2020-2023  润新知