关闭

poj 3262 贪心

标签: 算法poj贪心
109人阅读 评论(0) 收藏 举报
分类:

题意:(翻译一遍)农夫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);
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31429次
    • 积分:3503
    • 等级:
    • 排名:第9457名
    • 原创:337篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    博客专栏
    最新评论