• P1717 钓鱼 洛谷


    https://www.luogu.org/problem/show?pid=1717

    题目描述

    话说发源于小朋友精心设计的游戏被电脑组的童鞋们藐杀之后非常不爽,为了表示安慰和鼓励,VIP999决定请他吃一次“年年大丰收”,为了表示诚意,他还决定亲自去钓鱼,但是,因为还要准备2013NOIP,z老师只给了他H(1<=H<=16)个小时的空余时间,假设有N(2<=n<=25)个鱼塘都在一条水平路边,从左边到右编号为1、2、3、。。。、n)。VIP是个很讲究效率的孩子,他希望用这些时间钓到尽量多的鱼。他从湖1出发,向右走,有选择的在一些湖边停留一定的时间钓鱼,最后在某一个湖边结束钓鱼。他测出从第I个湖到I+1个湖需要走5*ti分钟的路,还测出在第I个湖边停留,第一个5分钟可以钓到鱼fi,以后再每钓5分钟鱼,鱼量减少di。为了简化问题,他假定没有其他人钓鱼,也不会有其他因素影响他钓到期望数量的鱼。请编程求出能钓最多鱼的数量。

    输入输出格式

    输入格式:

    第一行:湖的数量n。

    第二行:时间h(小时)。

    第三行:n个数,f1,f2,…fn。

    第四行:n个数,d1,d2,….dn。

    第五行:n-1个数,t1,t2,….tn-1

    输出格式:

    一个数,所能钓鱼的最大数量。

    输入输出样例

    输入样例#1:
    2
    1
    10  1
    2  5
    2
    
    输出样例#1:
    31

    优先队列做法

    #include <algorithm>
    #include <iostream>
    #include <cstring #include <cstdio> #include <queue> //优先队列!! #define fish first #define lake second #define forr(i,j,k) for(i=j;i<=k;i++) using namespace std; priority_queue< pair<int,int> >heap; //注意!!书名号之间必须有空格! int t[101],f[101],d[101]; int ans,m,Max,n,k,tl,Time; int main() { int i,j; cin>>n; cin>>m; m*=60; forr(i,1,n) cin>>f[i]; forr(i,1,n) cin>>d[i]; forr(i,1,n-1) cin>>t[i]; forr(k,1,n) {//枚举最远走到的池塘的编号 int Time=m-tl;//计算剩余的时间 int ans=0; for(i=1;i<=k;i++) {//收集能够钓鱼的池塘的资料 heap.push(make_pair(f[i],i)); } while(Time>0&&heap.top().fish>0) { pair<int,int> a=heap.top();//访问不删除与 heap.front();类似 heap.pop(); ans+=a.fish; //贪心选取鱼塘编号 a.fish-=d[a.lake];//修改鱼的数量 heap.push(a); //插入a;重置堆 Time-=5; //时光飞逝 } if(ans>Max) Max=ans;//打擂台 tl+=t[k]*5; //用时累计 } cout<<Max<<endl; return 0; }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    python--模块与包
    内置函数 的总结
    迭代器 生成器 列表推导式 生成器表达式的一些总结
    函数的有用信息 带参数的装饰器 多个装饰器装饰一个函数
    函数名的应用(第一对象) 闭包 装饰器
    动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结
    函数的初识 函数的返回值 参数
    文件操作 常用操作方法 文件的修改
    遍历字典的集中方法 集合的作用 以及增删查的方法
    计算机硬件的小知识
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6481086.html
Copyright © 2020-2023  润新知