FatMouse' Trade
2014-02-17 19:31
302 查看
题目:
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
Sample Output
这个问题和背包问题几乎一样,只是有点细微差别。
要注意的是,有可能某个房间里有JavaBean但是需要的猫粮是零,这种情况要考虑。
代码:
还有同学的一个:
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
这个问题和背包问题几乎一样,只是有点细微差别。
要注意的是,有可能某个房间里有JavaBean但是需要的猫粮是零,这种情况要考虑。
代码:
#include<stdio.h> main() { int i,j; int a[1100],b[1100],tempx; double sum; double c[1100],temp; int m,n; while(scanf("%d%d",&m,&n)&&(m!=-1&&n!=-1)) { sum=0; for(i=0;i<n;i++) { scanf("%d%d",&a[i],&b[i]); } for(i=0;i<n;i++) { if(b[i]==0) { sum=sum+a[i]; for(j=i;j<n-1;j++) { a[j]=a[j+1]; b[j]=b[j+1]; } n--; i--; } } for(i=0;i<n;i++) { c[i]=1.0*a[i]/b[i]; } for(i=0;i<n;i++) { for(j=0;j<n-1;j++) { if(c[j]<c[j+1]) { temp=c[j]; c[j]=c[j+1]; c[j+1]=temp; tempx=a[j]; a[j]=a[j+1]; a[j+1]=tempx; tempx=b[j]; b[j]=b[j+1]; b[j+1]=tempx; } } } for(i=0;i<n;i++) { if(m>b[i]) { sum=sum+a[i]; m=m-b[i]; } else { sum=sum+m*c[i]; break; } } printf("%.3lf\n",sum); } }
还有同学的一个:
#include<stdio.h> #include<algorithm> using namespace std; struct node { double a; double b; double c; }s[1000]; bool cmp(node a,node b) { return a.c>b.c; } int main() { double p,q; int i,m,n; while(scanf("%d%d",&m,&n),(m!=-1)&&(n!=-1)) { p=0; q=0; for(i=0;i<n;i++) { scanf("%lf%lf",&s[i].a,&s[i].b); s[i].c=s[i].a/s[i].b; } sort(s,s+n,cmp); i=0; while(p<m&&i<n) { p+=s[i].b; q+=s[i].a; i++; } printf("%.3f\n",q-(p-m)*(s[i-1].a/s[i-1].b)); } }
相关文章推荐
- hdu-3308-LCIS 线段树
- HDU 1166 敌兵布阵
- HDU 1166 敌兵布阵
- 一个 fork 的面试题
- db2错误码整理
- 【几何+暴力】-CF-391D1-Supercollider
- powerpc开发板使用收获总结
- Sicily 1926
- UILabel
- J2EE——Jsp的学习
- js中call与apply用法
- Balanced Binary Tree
- 设计一个可以用<<和逗号输入矩阵的方案
- [Python]python学习笔记(一)——语法
- 【转】PHP怎么实现字符串翻转(包含中文汉字)
- 模视图转换
- Sicily 1930
- openwrt启动脚本分析
- Install Shield 脚本(总)
- 好玩的指针