poj 3262 贪心

题意:(翻译一遍)农夫J想要去砍树,留下N头牛,让他们吃草,当他返回的时候,使他焦虑的是  他发现那群牛正在吃他漂亮的花,为了使他接下来的

               损失达到最小,他立刻采取行动,把牛赶回牛圈里。每头牛在距离牛圈Ti位置,而且,当牛在等待的时候,他每单位时间吃Di朵花,农夫J一次只能

              赶一头牛,需要2*Ti时间(来回),问按照那种赶牛顺序可以使损失最小。(在赶牛的过程中,被赶的那头牛不吃花,其他牛吃花)

#include<stdio.h>
#include<math.h>
typedef struct
{
    int eat,distance;
}Cow;
Cow cow[100500];
void qsort(int l,int r)
{
         int i,j;
        Cow temp;
         if(l<r)
          {
              i=l;
              j=r;
              temp=cow[l];
              while(i<j)
              {
                     while(i<j&&cow[j].eat*temp.distance<=temp.eat*cow[j].distance)
                            j--;
                     if(i<j)
                       cow[i++]=cow[j];
                     while(i<j&&cow[i].eat*temp.distance>temp.eat*cow[i].distance)
                              i++;
                     if(i<j)
                       cow[j--]=cow[i];
             }
             cow[i]=temp;
             qsort(l,i-1);
             qsort(i+1,r);
          }
}
int main(void)
{
        int i,N,j,sum=0;
        long long tsum=0;
        scanf("%d",&N);
        for(i=0;i<N;i++)
        {
              scanf("%d%d",&cow[i].distance,&cow[i].eat);
              sum+=cow[i].eat;
        }
        qsort(0,N-1);
        tsum=0;
        for(i=0;i<N;i++)
        {
                     sum-=cow[i].eat;
                     tsum+=cow[i].distance*2*sum; 
         }
         printf("%lld\n",tsum);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值