标签:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2187
题目简问:
解题思路:
已知给出了 总钱数 和 一共的种类
1. 对给出的大米,按照价格进行升序,即让最便宜的大米排在最上面
2. 如果当前的 大米单价*数量>总钱数,则 一共能买 sum+= 总钱数/单价
否则 sum+=当前大米的总重量,同时总钱数-=大米单价*数量。
3.输出 sum 即可,注意格式。
AC 代码:
#include <stdio.h> #include <stdlib.h> struct N { int dj,zl; }; int cmp(const void *a,const void *b) { N *a1=(N *)a; N *b1=(N *)b; return a1->dj - b1->dj; } int main(void) { int c,tp,i; double mo,sum; struct N n[1010]; scanf("%d",&c); while(c--) { sum=0; scanf("%lf%d",&mo,&tp); for(i=0; i<tp; i++) { scanf("%d%d",&n[i].dj,&n[i].zl); } qsort(n,tp,sizeof(n[0]),cmp); for(i=0; i<tp; i++) { if((n[i].dj*n[i].zl)>=mo) { sum+=mo/(n[i].dj); break; } else { mo-=(n[i].dj*n[i].zl); sum+=n[i].zl; } } printf("%.2f\n",sum); } return 0; }
hdu 2187 悼念512汶川大地震遇难同胞——老人是真饿了
标签:
原文地址:http://www.cnblogs.com/A--Q/p/5715084.html