《ACM程序设计》-Problem-P-交换食物获得最大值问题
来源:互联网 发布:敬汉卿 知乎 编辑:程序博客网 时间:2024/05/29 15:07
题意:
描述
FatMouse准备了M磅的猫食,准备与猫守卫仓库包含他最喜欢的食物,JavaBean贸易。
仓库有N个房间。第i个房间包含J [i]磅的JavaBeans,需要F [i]磅的猫食。FatMouse不必为房间里的所有JavaBean交易,相反,如果他支付F [i] *一磅%的猫粮,他可能会得到J [i] *%的JavaBean。这里a是一个实数。现在他正在为你分配这个作业:告诉他他可以获得的JavaBeans的最大数量。
输入
输入由多个测试用例组成。每个测试用例以包含两个非负整数M和N的行开始。然后N行跟随,每行分别包含两个非负整数J [i]和F [i]。最后一个测试用例后面跟两个-1。所有整数不大于1000。
输出
对于每个测试用例,在一行中打印一个精确到小数点后三位的实数,这是FatMouse可以获得的最大JavaBeans数量。
样品输入
5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1
样品输出
13.333
31.500
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{ int i,q,w;
double b[1004],c[1004],d[1004],sum=0,k,m,n;
while(cin>>m>>n)
{ if(m==-1&&n==-1)
break;
for(i=0;i<n;i++)
{
cin>>c[i]>>d[i];
b[i]=c[i]/d[i];
}
for(w=0;w<n;w++)
{ k=0;
for(i=0;i<n;i++)
{
if(b[i]>k)
{
k=b[i];
q=i;
}
}
if(d[q]<=m)
{sum+=c[q];
m-=d[q];
c[q]=d[q]=b[q]=-1;
}
else
{
m=m*b[q];
sum+=m;
c[q]=d[q]=b[q]=-1;
break;
}
}
printf("%.3lf\n",sum);
sum=0;
}
return 0;
}
回顾:这道题思路清晰后写出来很快但是提交的时候总是分割错误,然后debug了半个多小时把原来不必要的许多东西都加上了显得很冗杂,到最后发现只是因为数组开的太小了,做题的时候需要留心数据范围大小。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{ double a[1005],b[1005],w[1005];
double k,c,d,sum=0,h;
int i,t;
//freopen("a.txt","r",stdin);
while(cin>>c>>d)
{
if(c==-1&&d==-1)
break;
sum=0;
for(i=0;i<d;i++)
{cin>>w[i]>>a[i];
b[i]=w[i]/a[i];}
h=0;
while(c>0&&h<d)//注意,一定要加h来判断是否已经将食物全部交换完,也许自己手中还有剩余的没有交换但是对方已经没了。就这个地方第二次做一直错,按道理说每次交换完以后清零应该不会有问题,想不明白。
{ k=0;t=0;
for(i=0;i<d;i++)
if(k<=b[i])
{
k=b[i];
t=i;
}
if(c>a[t])
{
c-=a[t];
sum+=w[t];
b[t]=-1;
}
else if(c<=a[t])
{
sum+=c*b[t];
b[t]=-1;
c=0;
break;
}
h++;
}
printf("%.3lf\n",sum);
}
return 0;
}
- 《ACM程序设计》-Problem-P-交换食物获得最大值问题
- 《ACM程序设计》书中题目--problem p
- ACM程序设计题目 Problem P-16(未通过)
- 《ACM程序设计》-Problem-B,字典问题
- 《ACM程序设计》-Problem-M-二倍问题
- 《ACM程序设计》-Problem-R-半素数问题
- ACM-problem P
- 《ACM程序设计》 P题
- ACM程序设计书中题目--P(粮食问题)
- ACM递归递推练习 Problem P
- 《ACM程序设计》书中题目 P
- 《ACM程序设计》书中题目P
- CF:Problem 425A - Sereja and Swaps 区间交换最大值
- 【算法】a b 最大值和交换问题
- 《ACM程序设计》书中题目--problem j
- 《ACM程序设计》-problem J -替换字符
- 《ACM程序设计》-Problem O-找出最多颜色
- 《ACM程序设计》书中题目--problem o
- 查询用户具备的职责和用户相关信息
- .java源文件中public类的问题
- C++数据存储的方式
- MATLAB第二次作业
- centos7 elasticsearch5.2.2安装x-pack
- 《ACM程序设计》-Problem-P-交换食物获得最大值问题
- IoC容器
- assert()函数用法
- 性能测试工具JMeter的使用
- Struts2拦截器的使用 (详解)(转)
- 八大排序——直接插入排序
- Java设计模式之组合模式
- 认识数字图像
- JavaWeb——eclipse与tomcat环境配置