zoukankan      html  css  js  c++  java
  • A

    Description

    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 p
    {
    	double a;
    	double b;
    	double c;
    };
    bool compare(p A,p B)
    {
    	return A.c>B.c;
    }
    int main()
    {
    	int m,n,i,j;
    	while(scanf("%d%d",&m,&n)!=EOF)
    	{
    		if(m==-1&&n==-1)
    			break;
    	    p t[1001];
            for(i=0;i<n;i++)
    		{
    			cin>>t[i].a>>t[i].b;
    			t[i].c=t[i].a/t[i].b;
    		}
    		sort(t,t+n,compare);	
    		double count=0;
    		for(i=0;i<n;i++)
    		{
    			count+=t[i].b;
    			if(count>m)
    				break;
    		}
    		double sum=0;
    		//if(i==0)
    			//printf("%.3lf
    ",t[0].c*m);
            if(count<m)
    		{
    			for(j=0;j<n;j++)
    				sum+=t[j].a;
    			printf("%.3lf
    ",sum);
    		}
    		else
    		{
    			for(j=0;j<i;j++)
    			{
    				sum+=t[j].a;
    				m-=t[j].b;
    			}
    			printf("%.3lf
    ",sum+m*t[i].c);
    		}
    	}
    	return 0;
    }
    

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
    	int m,n;
    	int i,j;
    	double a[1002],b[1002];
    	double c[1002];
    	while(scanf("%d%d",&m,&n)!=EOF)
    	{
    		if(m==-1&&n==-1)
    			break;
    		for(i=0;i<n;i++)
    		{
    			cin>>a[i]>>b[i];
    			c[i]=a[i]/b[i];
    		}
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<n-i-1;j++)
    			{
    				if(c[j+1]>c[j])
    				{
    					swap(b[j],b[j+1]);
    					swap(a[j],a[j+1]);
    					swap(c[j],c[j+1]);
    				}
    			}
    		}
    		double count=0;
    		for(i=0;i<n;i++)
    		{
    			count+=b[i];
    			if(count>m)
    				break;
    		}
    		double sum=0;
    		if(count<m)
    		{
    			for(j=0;j<n;j++)
    				sum+=a[j];
    			printf("%.3lf
    ",sum);
    		}
    		else
    		{
    			for(j=0;j<i;j++)
    			{
    				sum+=a[j];
    				m-=b[j];
    			}
    			printf("%.3lf
    ",sum+m*c[i]);
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    【codevs1227】方格取数2(最大流费最大流-模板
    【ZJOI2008】【BZOJ1033】杀蚂蚁(占坑待填
    python基础学习1-流程控制和判断
    python基础学习1-变量定义赋值,屏幕输入输出
    Jzoj5237 最长公共子序列
    Jzoj5236 利普希茨
    [置顶] 欢迎使用CSDN-markdown编辑器
    Jzoj5235 好的排列
    Jzoj5234 外星人的路径
    Jzoj5231 序列问题
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4237306.html
Copyright © 2011-2022 走看看