HDUOJ-1009 FatMouse' Trade(贪心)

采用贪心的思考问题方法

即“做出的是在某种意义上的局部最优解”,对于本题来说,局部最优解就是整体最优解,因此采用贪心法。

解题结构

· 一个结构体来存储每个房间的状态以及性价比

· 调用C++的algorithm库的 sort( LengthFirstAddress , LengthFirstAddress+Length , Compare ) 函数来进行排序,如果没有Compare则默认从小到大排序

· Compare结构为bool Compare(Type a,Type b){ return a>b; }
(a > b为降序,a < b为升序,Type为a,b的数据类型)

解题核心

状态1:老鼠剩余的猫粮可以完全买下性价比最高的房子的豆子,那么买下,并更新自己持有的猫粮数,统计买到手的豆子

状态2:剩余的猫粮不足以买下性价比最高的房子的豆子,那么按百分比来买,并更新自己持有的猫粮数,统计买到手的豆子
,(此时已经没"钱"了,结束判断,输出结果)

Accept代码

/*
* Created by zsdostar in 2016/4/30
*/
#include 
#include
using namespace std;
struct greedheart
{
  double value;
  double JavaBean;
  double CatFood;
};
bool compare(greedheart room1,greedheart room2)
{
  return room1.value>room2.value;
}
int main()
{
  int m,n;
  struct greedheart room[10010];
  while((cin>>m>>n)&&(m!=-1)&&(n!=-1))
  {
      double thentotal=m;
      double sum=0;
      for(int i=0;i> room[i].JavaBean >> room[i].CatFood;
          room[i].value = room[i].JavaBean / room[i].CatFood;
      }
      sort(room,room+n,compare);
      for(int i=0;i= room[i].CatFood)
          {
              sum += room[i].JavaBean;
              thentotal -= room[i].CatFood;
          }
      }
      printf("%.3lf\n",sum);
  }
}

(感觉英文才是ACM最大的难点。。看了TinyJian的翻译才看明白题意。。)
(TinyJian的博客:http://blog.csdn.net/TinyJian/article/details/48738693)

你可能感兴趣的:(HDUOJ-1009 FatMouse' Trade(贪心))