题意:
      你有H小时(H*12个单位)时间去用,有n个鱼池在一条直线上,一开始你在1的位置,可以选择在某些鱼池上钓鱼,但是如果持续在一个鱼池上钓鱼钓鱼速度回成线性减少,初始每个时间单位钓fi条,然后下一个时间单位钓fi-di条,再下一个fi-di-di条,每个鱼池和他下一个鱼池的距离是ti个时间单位,最后你可以听到任意一个鱼池上,问最多钓多少条鱼,然后输出在个鱼池的停留时间和最多的鱼数。

思路:
      枚举终点,对于每一个枚举的终点也就是相当于拥有了一段可以随意选的鱼塘,然后我们在枚举区间没一个单位一个单位的去选,每次都去选最优的一个,然后加到总和里,然后把当前这个鱼塘的速度改变下,这里可以用优先队列去实现,每次拿出一个最优的,然后更新总和,然后把拿出来这个更改数值后存回队列,还有就是注意输出要求,答案不确定的时候输出什么啥的一些小细节。

#include<queue>
#include<stdio.h>
#include<string.h>

using namespace std;

typedef struct NODE
{
    int id ,f ,d;
    friend bool operator < (NODE a ,NODE b)
    {
        return a.f < b.f || a.f == b.f && a.id > b.id;
    }
}NODE;

int main ()
{
    int n ,h ,i ,j ,sum ,tsum;
    int ans[30] ,tans[30];
    int tt[30];
    NODE node[30];
    int mk = 0;
    while(~scanf("%d" ,&n) && n)
    {
        if(mk) printf("\n");
        mk = 1;
        scanf("%d" ,&h);
        for(i = 1 ;i <= n ;i ++)
        {
            scanf("%d" ,&node[i].f);
            node[i].id = i;
        }
        for(i = 1 ;i <= n ;i ++)
        scanf("%d" ,&node[i].d);
        for(i = 1 ;i < n ;i ++)
        scanf("%d" ,&tt[i]);
        memset(ans ,0 ,sizeof(ans));
        sum = -1;
        int s = 0;
        h *= 12;
        for(i = 1 ;i <= n ;i ++)
        {
            if(i == 1) s = 0;
            else s += tt[i-1];
            if(s > h) break;
            priority_queue<NODE>q;
            NODE xin ,tou;
            for(j = 1 ;j <= i ;j ++)
            q.push(node[j]);
            int hh = h - s;
            memset(tans ,0 ,sizeof(tans));
            tsum = 0;
            while(hh--)
            {
                tou = q.top();
                q.pop();
                tans[tou.id] += 5;
                tsum += tou.f;
                tou.f -= tou.d;
                if(tou.f < 0) tou.f = 0;
                q.push(tou);
            }
            if(tsum > sum)
            {
                for(j = 1 ;j <= n ;j ++)
                ans[j] = tans[j];
                sum = tsum;
            }
        }
        for(i = 1 ;i <= n ;i ++)
        {
            if(i == n) printf("%d\n" ,ans[i]);
            else printf("%d, ",ans[i]);
        }
        printf("Number of fish expected: %d\n" ,sum);
    }
    return 0;
}

POJ1042 贪心钓鱼相关推荐

  1. POJ1042 John钓鱼 C语言代码

    POJ1042 题目不再描述了,上面是网址超链接. 个人遭遇···: 简而言之,读了N遍题.脑子里想了半天(time>=1.5h),出现了无数想法,考虑了很多情况,仍然找不到切入点.于是,我就是 ...

  2. c 语言贪心钓鱼思路,2020届九年级中考语文复习教案:第4讲现代文阅读之概括(27页)-原创力文档...

    PAGE14 / NUMPAGES16 第4讲 现代文阅读之概括 (一) 模块 分值 2019 2018 2017 2016 2015 2014 现代文阅读概括 \ \ 3 3 \ \ 概括 年份 题 ...

  3. 鱼塘钓鱼 优先队列 多路归并排序 贪心

    鱼塘钓鱼 优先队列 多路归并排序 贪心 优先队列介绍 贪心思想:不会回头 解题思想:枚举0-N-1目的地鱼塘k, 如图 从上到下 选t(钓鱼的时间)个数,使和最大 #include<iostre ...

  4. 1373:鱼塘钓鱼(fishing)——优先队列+贪心

    [题目描述] 有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表: 即:在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼,第2分钟内只能钓到8条鱼,--,第5分钟以后再 ...

  5. 贪心算法-鱼塘钓鱼程序

    1.题目描述 约翰有h(1≤h≤16)个小时的时间,在该地区有n(2≤n≤25)个湖,这些湖刚好分布在一条路线上,该路线是单向的.约翰从湖1出发,他可以在任一个湖结束钓鱼.但他只能从一个湖到达另一个与 ...

  6. java买房子钓鱼,AcWing 1262. 鱼塘钓鱼(Java 贪心 Or 优先队列)

    算法1 贪心 先考虑最远到哪个鱼塘,把路上的时间预先减掉,剩下的就是完全用于钓鱼的时间注意这里不用考虑折返的情况,因为如果折返前一个池塘钓鱼可以得到更优解,那么完全可以在之前就接着钓 因为一分钟计算一 ...

  7. 【一本通评测 1373】【堆】【贪心】鱼塘钓鱼

    鱼塘钓鱼 题目 解题思路 Code 一本通评测 1373:鱼塘钓鱼(fishing) 题目 [题目描述] 有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表: 鱼 ...

  8. SSL 2331 洛谷 1717 信息学奥赛一本通 1373 鱼塘钓鱼#贪心#

    动态规划 温馨提示:交洛谷请在总时间*12并调整输入格式. 题目 设计一个钓鱼方案,从第1个鱼塘出发,希望能钓到最多的鱼. 分析 首先是贪心,最后在第i个鱼塘钓鱼的话,那么路上的时间是固定的,所以也可 ...

  9. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

最新文章

  1. 所有类是object的子类,但是又可以继承一个其他类解析
  2. Win10一周更新系统开始面向企业分支推送
  3. 密码强度测试工具包【Java】_测试用例
  4. oracle10g 开机自启动
  5. CodeForces - 1344D Monopole Magnets(dfs)
  6. [剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]
  7. Vue-Router中History模式【华为云分享】
  8. 不同模块下包重名怎么解决_口臭怎么解决?|盘点不同类型口臭的去除方法
  9. 1v1项目实战+真实经验倾囊相授,0基础的我是如何逆袭成功?
  10. 达梦数据库的表空间及用户管理
  11. 头的各个部位示意图_人体头部结构图:人体图片头部组织图文解读
  12. 参数validator/valid校验用法(通俗)
  13. Android 报错 : FATAL EXCEPTION:main 解决方法
  14. 程序员大佬都在用的代码编辑器,你不用就OUT啦
  15. xposed框架的检测和反制
  16. Construct 2 制作游戏心得
  17. 6个免费PPT模板网站,简直不要太好用
  18. handlebars学习总结
  19. java基础入门了解
  20. 西风不暖当年月,一别经年再相逢

热门文章

  1. linux断电关机后,进度条满后卡在那里
  2. 如何借助 svn update 自动更新线上的web
  3. VC++读取图像RGB值
  4. 【Javascript】之eval()
  5. 女孩子学电脑进入IT行业有什么优势?
  6. 众论英特尔虚拟化之VMware篇
  7. Python爬虫(十)_XPath与lxml类库
  8. HDFS2.X架构及工作原理
  9. MFC接收命令行参数的三种方法
  10. Android 布局中 如何使控件居中