前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Fishing Master HDU - 6709 】【贪心】

【Fishing Master HDU - 6709 】【贪心】

作者头像
_DIY
发布2019-09-11 17:29:54
2720
发布2019-09-11 17:29:54
举报

题意分析

题意:题目给出n条鱼,以及捕一条鱼所用的时间k,并给出煮每一条鱼的时间,问抓完并煮完所有鱼的最短时间。 附题目链接 思路: 1.捕第一条鱼的时间是不可避免的,煮每条鱼的时间也是不可避免的,这些都要算上。 2.可以优化的是煮鱼的时间,在时间允许的范围内可进行捕其他鱼。当然煮鱼的时间也许不够捕其他鱼,这就需要增加额外的时间。 3.设在煮每条鱼煮的时间内抓的最多的鱼数为cnt,捕鱼的时间为cost,将每次额外增加的时间存储在一个数组中,记为fre[ ]。 4.更多详细信息在代码中给出。

AC代码

代码语言:javascript
复制
/*贪心*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = int(1e5+10);
int T, n, k;
int cnt;        //在煮鱼期间最多能钓上来的鱼数
int t[maxn], fre[maxn];
LL cost;
int main()
{
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &n, &k);
        cost = k;       //捕第一条鱼的时间不可避免
        cnt = 0;
        memset(t, 0, sizeof(t));
        memset(fre, 0, sizeof(fre));
        for(int i = 0; i < n; i++)
        {
            scanf("%lld", &t[i]);
            cost += t[i];       //煮鱼的时间不可避免
            cnt += t[i] / k;
            fre[i] = k - t[i] % k;      //k - 每次煮鱼的时间所剩余的可利用时间 = 多投入的时间
        }
        if(cnt < n - 1)
        {
            sort(fre, fre + n);    
            for(int i = 0; i < n - 1 - cnt; i++)     //贪心思想,从小往大加
                cost += fre[i];
        }
        printf("%lld\n", cost);
    }
}

参考博客:http://morecoder.com/article/1265379.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意分析
  • AC代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档