hdu4882 水贪心

题意:
     给你n个任务,每个任务有两个权值,t[i],b[i],前面的是完成任务所需时间,后面的那个是个参数,每个任务完成的代价是完成当前任务总时间(之前的+现在的)
sumt * b[i],问你完成所有任务的总花费最小是多少。
思路:
     水贪心吧,不给证明了,没啥意思,就想象一下,那个东西价值贵就先干那个就行了

价值等于 b[i] / t[i],价值贵的放到最后干会吃亏的。

#include<stdio.h>
#include<algorithm>

using namespace std;

typedef struct
{
   __int64 x ,y;
   double key;
}NODE;

bool camp(NODE a ,NODE b)
{
   return a.key > b.key;
}

NODE node[110000];

int main ()
{
   int n ,i;
   while(~scanf("%d" ,&n))
   {
      for(i = 1 ;i <= n ;i ++)
      scanf("%I64d" ,&node[i].x);
      for(i = 1 ;i <= n ;i ++)
      {
         scanf("%I64d" ,&node[i].y);
         node[i].key = node[i].y * 1.0 / node[i].x;
      }
      sort(node + 1 ,node + n + 1 ,camp);
      __int64 sum = 0 ,ans = 0;
      for(i = 1 ;i <= n ;i ++)
      {
         sum += node[i].x;
         ans += sum * node[i].y;
      }
      printf("%I64d
" ,ans);
   }
   return 0;
}



原文地址:https://www.cnblogs.com/csnd/p/12062930.html