FatMouse准备了M磅的猫粮,准备和那些守卫仓库的猫进行交易,仓库里存放着他最喜欢的食物,JavaBean。
仓库有N个房间。第i个房间里有几磅爪哇肉,需要几磅猫食。FatMouse不需要对房间里的所有javabean进行交易,相反,如果他支付F (i) * %的猫粮,他可能会得到J[i]* %的javabean。a是实数。现在他正在给您分配这个作业:告诉他他能获得的最大javabean数量。
输入由多个测试用例组成。每个测试用例以包含两个非负整数M和N的行开始,然后接下来有N行,每一行分别包含两个非负整数J[i]和F[i]。最后一个测试用例后面跟着两个-1。所有整数都不大于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;
int main()
{
int m,n,j[1001]= {0},f[1001]= {0},i,flag;
double k[1001]= {0},max,sum=0;
while(1)
{
sum=0;
cin>>m>>n;
if(m==-1&&n==-1)
break;
for(i=1; i<=n; i++)
{
cin>>j[i]>>f[i];
k[i]=(double)j[i]/f[i];
}
while(m>0)
{
max=k[1];
flag=1;
for(i=1;i<=n;i++)
{
if(k[i]!=0)
break;
}
if(i==n+1&&k[n]==0)
break;
for(i=1; i<=n; i++)
{
if(k[i]>=max)
{
max=k[i];
flag=i;
}
}
if(f[flag]>=m)
{
sum+=(double)j[flag]*(m/(double)f[flag]);
m=0;
}
else
{
m=m-f[flag];
sum+=j[flag];
k[flag]=0;
}
}
printf("%.3f\n",sum);
}
return 0;
}
Input
输入包含多个测试实例,每个实例的第一行是两个整数v和n(v,n<100),分别表示口袋的容量和宝贝的种类,接着的n行每行包含2个整数pi和mi(0<pi,mi<10),分别表示某种宝贝的单价和对应的体积,v为0的时候结束输入。
Output
对于每个测试实例,请输出XHD最多能取回多少价值的宝贝,每个实例的输出占一行。
Sample Input
2 2 3 1 2 3 0
Sample Output
5
#include <iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int m,n,j[1001]= {0},f[1001]= {0},i,flag;
double k[1001]= {0},max,sum=0;
while(1)
{
sum=0;
cin>>m;
if(m==0)
break;
cin>>n;
for(i=1; i<=n; i++)
{
cin>>j[i]>>f[i];
}
while(m>0)
{
max=j[1];
flag=1;
for(i=1; i<=n; i++)
{
if(j[i]!=0)
break;
}
if(i==n+1&&k[n]==0)
break;
for(i=1; i<=n; i++)
{
if(j[i]>=max)
{
max=j[i];
flag=i;
}
}
if(f[flag]>=m)
{
sum+=m*j[flag];
m=0;
}
else
{
m=m-f[flag];
sum+=j[flag]*f[flag];
j[flag]=0;
}
}
printf("%.0f\n",sum);
}
return 0;
}