【virtual judge】-已知拥有钱数求可以买的大米数量

来源:互联网 发布:黑莓软件怎么删除 编辑:程序博客网 时间:2024/04/30 16:15

对于幸存的灾民来说,最急待解决的显然是温饱问题,救灾部队一边在组织人员全力打通交通,一边在组织采购粮食。现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢? 
 

Input

输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应大米的重量。
 

Output

对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。 
每个实例的输出占一行,保留2位小数。
 

Sample Input

17 23 34 4
 

Sample Output

2.33
 


#include<stdio.h>#include<algorithm>using namespace std;struct mi{double dj;double sl;}date[2000];bool cmp(mi a,mi b){return a.dj<b.dj; }int main(){int t;scanf("%d",&t);while(t--){double n,m;double a[2000];double y1=0;double y2=0;scanf("%lf%lf",&n,&m);for(int i=0;i<m;i++){scanf("%lf%lf",&date[i].dj,&date[i].sl);}sort(date,date+(int)m,cmp);for(int i=0;i<m;i++){n=n-date[i].dj*date[i].sl;if(n<0){n=n+date[i].dj*date[i].sl;break;}y2=y2+date[i].sl;y1=y1+1;}y1=n/date[(int)y1].dj;printf("%.2lf\n",y1+y2);}return 0;}

下面是错误的代码,但是不知道错哪,留着以后瞅瞅吧,不过还在、是上面叫做贪心的更简单


#include<stdio.h>#include<algorithm>using namespace std;struct mi{double dj;double sl;}date[2000];bool cmp(mi a,mi b){return a.dj<b.dj; }int main(){int t;scanf("%d",&t);while(t--){double n,m;double a[2000];double y1=0;double y2=0;double y4=0;scanf("%lf%lf",&n,&m);double y3=n;for(int i=0;i<m;i++){scanf("%lf%lf",&date[i].dj,&date[i].sl);}sort(date,date+(int)m,cmp);for(int i=0;i<m;i++){y1=y1+date[i].sl*date[i].dj;y2+=1;if(y1>=n)break;}for(int i=0;i<(y2-1);i++){y3=n-date[i].sl*date[i].dj;}y3=y3/date[(int)y2-1].dj;for(int i;i<(y2-1);i++){y4=y4+date[i].sl;}printf("%.2lf\n",(y3+y4));}return 0;}





0 0
原创粉丝点击