当前位置:   article > 正文

金银岛(贪心算法实操)_金银岛 贪心

金银岛 贪心

题目

 解答

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct Kuangshi {
  4. int weight;
  5. int money;
  6. double danjia;
  7. };
  8. int cmp(const void *a, const void *b) {
  9. struct Kuangshi *aa = (struct Kuangshi *)a;
  10. struct Kuangshi *bb = (struct Kuangshi *)b;
  11. return (((aa->danjia) < (bb->danjia)) ? 1 : -1);
  12. }
  13. int main() {
  14. int k, w, s;
  15. int i, j;
  16. double Output[100];
  17. scanf("%d", &k); //组数
  18. for ( i = 0; i < k; i++) {
  19. scanf("%d", &w); //口袋上限
  20. scanf("%d", &s); //矿石种类
  21. Kuangshi kuangshi[s];
  22. for ( j = 0; j < s; j++) { //录入
  23. scanf("%d %d", &kuangshi[j].weight, &kuangshi[j].money);
  24. kuangshi[j].danjia = (double)kuangshi[j].money / (double)kuangshi[j].weight;
  25. }
  26. qsort(kuangshi, s, sizeof(kuangshi[0]), cmp); //从大到小排序
  27. int shengyu = w; //剩余空间
  28. j = 0;
  29. Output[i]=0;
  30. do {
  31. shengyu -= kuangshi[j].weight;
  32. if(shengyu<0){
  33. Output[i]=Output[i]+(shengyu+kuangshi[j].weight)*kuangshi[j].danjia;
  34. }else Output[i] += kuangshi[j].money;
  35. j++;
  36. } while (shengyu > 0&&j<s);
  37. }
  38. for(int i=0;i<k;i++){
  39. printf("%.2lf\n",Output[i]);
  40. }
  41. return 0;
  42. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/620851
推荐阅读
相关标签
  

闽ICP备14008679号