关闭

POJ3262——Protecting the Flowers(贪心)

标签: 贪心
94人阅读 评论(0) 收藏 举报
分类:

题目链接

        题目大意是说农场主要尽可能的减少牛吃花造成的损失,所以赶牛回牛圈,但是一次只能赶一头牛,现给出赶一头牛花的时间和牛每分钟吃的花的数量,求最少牛会吃掉多少花?处理起来也比较容易,关键找到赶牛的顺序,所以排序是关键。其实利用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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8359次
    • 积分:549
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:7篇
    • 译文:0篇
    • 评论:0条
    文章分类