POJ3262——Protecting the Flowers(贪心)

题目链接

        题目大意是说农场主要尽可能的减少牛吃花造成的损失,所以赶牛回牛圈,但是一次只能赶一头牛,现给出赶一头牛花的时间和牛每分钟吃的花的数量,求最少牛会吃掉多少花?处理起来也比较容易,关键找到赶牛的顺序,所以排序是关键。其实利用sort函数就挺好的,写一个cmp,里面比较的就是按照a牛单位时间吃的花与赶b牛的时间乘积与b牛单位时间吃的花与赶a牛的时间乘积,选其较小者。然后统计总损耗花数即可,不知道是不是策略的原因,程序整体跑的还是很慢。。。


#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>

using namespace std;

struct node
{
    double distan;
    double distroy;
    long long time;
    node()
    {
        distan=0;//距离
        distroy=0;//毁坏花数
        time=0;//总计毁坏时间
    }
}s[100005];

bool cmp(node a,node b)
{
    return a.distan*b.distroy<b.distan*a.distroy;
}

int main()
{
    //freopen("in.in","r",stdin);
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%lf%lf",&s[i].distan,&s[i].distroy);
    sort(s,s+n,cmp);
    long long sum=0;
    for(int i=1;i<n;i++)
    {
        //printf("%lf %lf %lf\n",s[i].distan,s[i].distroy,s[i].st);
        s[i].time=s[i-1].time+s[i-1].distan*2;
        sum+=s[i].time*s[i].distroy;
    }
    printf("%lld\n",sum);
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值