题意:

      你有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(贪心+枚举)

    题目链接:https://vjudge.net/problem/POJ-1042 题意:给n个湖,给出每个湖第一次打捞时鱼的数量f[i],每单位时间鱼减少的数量d[i],从湖i到湖i+1用时t[i], ...

  2. HLJU 1046: 钓鱼(数据增强版) (贪心+优化)

    1046: 钓鱼(数据增强版) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 11  Solved: 3 [id=1046">Subm ...

  3. 贪心整理&一本通1431:钓鱼题解

    题目传送 (其实有一个更正经的题解) 看了许久,发现这题貌似就是一个动态规划啊,但毕竟是贪心题库里的题,还是想想用贪心解吧. 经过(借鉴大佬思路)十分复杂的思考后,终于理解出了这题的贪心思路.该题的难 ...

  4. 钓鱼 贪心 end

    #include<iostream> int m,n; int *p; int dis=0; int peo=0; int data[3][2]; int b[3][2]; int da[ ...

  5. 暑假集训Chapter1 贪心

    为什么要今天写呢? 明天全力研究Johnson和一些奇奇怪怪的贪心 今天把能写的都写了 T1T2太水了直接上代码吧 #include<bits/stdc++.h> #define LL l ...

  6. 洛谷P1717 钓鱼

    P1717 钓鱼 41通过 116提交 题目提供者该用户不存在 标签贪心 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 话说发源于小朋友精心设计的游戏被电脑组的童鞋 ...

  7. <算法竞赛入门经典> 第8章 贪心+递归+分治总结

    虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...

  8. POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)

    Gone Fishing Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 30281   Accepted: 9124 Des ...

  9. poj_1042 贪心算法

    poj 1042 gone fishing 题目要求: 由有n个湖, 按照顺序排列,一个人从第一个湖向最后一个湖行进(方向只能从湖0到湖n-1),途中可以在湖中钓鱼.在每个湖中钓鱼时,开始的5分钟内可 ...

随机推荐

  1. 不用typsescript也能使用类型增强功能

    由于 JS 的弱类型.宽松的编写规范.以及开发工具的弱鸡支持,我们在维护前人的代码时,经常会出现不知道某一个方法或字段命名来自于哪里,一定要在全局搜索以后慢慢筛查才能找到 同样我们在使用接口返回的对象 ...

  2. 大牛带你学会java类加载机制,不要错过,值得收藏!

    很多人对java类加载机制都是非常抗拒的,因为这个太难理解了,但是我们作为一名优秀的java工程师,还是要把java类加载机制研究和学习明白的,因为这对于我们在以后的工作中有很大的帮助,因为它在jav ...

  3. 漏洞复现-CVE-2016-4437-Shiro反序列化

        0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机) 0x01 影响版本 Shiro <= ...

  4. CVE-2019-11043-Nginx PHP 远程代码执行

    漏洞原因 Nginx 上 fastcgi_split_path_info 在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致 PATH_INFO 为空.而 php-fpm 在处理 PATH_I ...

  5. Java 获取小程序openid(基于SpringBoot)

    Java 获取小程序openid(基于SpringBoot) 官方文档 wx.login 1.引入Request封装依赖 <!--Request依赖--> <dependency&g ...

  6. 如何报告FreeBSD 的bug?

    https://bugs.freebsd.org/bugzilla/ 注册个账号即可,请使用英语,把程序在不同程序上的运行结果列出来即可- ​​​​ 注意标记架构,如果有log还请一并附上,英语差可以 ...

  7. [省选联考 2020 A/B 卷] 冰火战士

    一.题目 点此看题 二.解法 其实这道题也不是特别难吧 \(......\) 但树状数组上二分是我第一次见. 我们把冰人和火人都按温度排序,那么考虑一个分界线 \(x\) ,问题就是求冰数组 \(x\ ...

  8. Android的Proxy/Delegate Application框架

    转自:http://blogs.360.cn/360mobile/2013/11/25/proxydelegate-application/#comment-77 有的时候,为了实现一些特殊需求,如界 ...

  9. python3 输出字符

    import string'''whitespace -- a string containing all ASCII whitespaceascii_lowercase -- a string co ...

  10. python3 list合并

    1 t1=[x for x in range(5)] 2 t2=[x for x in range(5,10)] 3 4 #way1:通过方法extend(),直接修改列表,无返回值 5 # t1.e ...