sky_zdk的博客

相信奇迹的人本身就和奇迹一样了不起

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);
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sky_zdk/article/details/53995178
文章标签: 算法 poj 贪心
个人分类: ACM poj
上一篇poj 1862 贪心
下一篇poj 3176
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭