贪心算法之钓鱼

原创 2018年04月17日 18:45:46

枚举在第i个湖结束钓鱼,那么花在路上的时间确定。贪心策略是每次在鱼剩余最多的地方钓鱼,如果有多个湖,则取编号最小的

出列,更新再入列

#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <memory>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
#include <queue>
using namespace std;
struct node
{
    int f,d,id,t;
    friend bool operator <(const node &a,const node &b)
    {
        if(a.f==b.f)
            return a.id > b.id;
        else
            return a.f < b.f;
    }
};
node fish[30];
priority_queue <node> q;
int n,T;
int Time[30];
int best[30];
int main()
{
    cin >> n;
    while(n!=0)
    {
        cin >> T;
        T*=12;
        for(int i=0; i<n; i++)
        {
            cin >> fish[i].f;
            fish[i].id = i;
        }
        for(int i=0; i<n; i++)
            cin >> fish[i].d;
        memset(Time,0,sizeof(Time));
        Time[0] = 0;
        for(int i=1; i<n; i++)
        {
            cin >> fish[i].t;
            Time[i] = fish[i].t;
            Time[i] += Time[i-1];
        }
        memset(best,0,sizeof(best));
        int maxfish=-1;/**注意,开始wa被这坑了**/
        for(int i=0; i<n; i++)
        {
            while(!q.empty())
                q.pop();
            for(int j=0; j<=i; j++)//只在前i个湖上钓鱼
                q.push(fish[j]);
            int fisht =0;
            fisht = T-Time[i];
            int temp[105];
            memset(temp,0,sizeof(temp));
            int numfish=0;
            while(fisht>0 && !q.empty())
            {
                node now = q.top();
                q.pop();
                fisht--;
                numfish+=now.f;
                now.f-=now.d;
                if(now.f<0)
                    now.f=0;
                temp[now.id]++;
                q.push(now);
            }
            if(numfish>maxfish)
            {
                maxfish = numfish;
                for(int k=0; k<n; k++)
                    best[k] = 5*temp[k];
            }
        }
        for(int i=0; i<n-1; i++)
            cout<<best[i]<<", ";
        cout<<best[n-1]<<endl;
        cout<<"Number of fish expected: "<<maxfish<<endl;
        cin >> n;
        if(n>0) cout<<endl;
    }

    return 0;
}

贪心算法典型例题钓鱼问题

  • 2010年04月29日 20:05
  • 1KB
  • 下载

POJ-1042 Gone Fishing (贪心法求最佳钓鱼方案

John is going on a fishing trip. He has h hours available (1
  • u011044871
  • u011044871
  • 2014-05-06 08:43:21
  • 1330

QQ账号钓鱼程序(含源代码)

  • 2010年03月01日 14:41
  • 2.39MB
  • 下载

算法入门——小猫钓鱼纸牌

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第...
  • royal690510604
  • royal690510604
  • 2017-08-26 20:12:51
  • 515

2016最新钓鱼网页源码

  • 2016年01月15日 09:54
  • 1022KB
  • 下载

QQ最新钓鱼源码,带教程

  • 2017年02月09日 10:13
  • 7.79MB
  • 下载

钓鱼软件生成器2011加强版(无需注册).rar

  • 2011年11月15日 10:43
  • 2.95MB
  • 下载

纸牌游戏--小猫钓鱼

“小猫钓鱼”游戏规则: 将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手上的第一张扑克牌放在桌子上,然后小哈也拿出手上的第一张扑克牌,放在小哼刚打出的牌上面,就这样两人交替出牌。出牌时,如果某人打...
  • qq_36221862
  • qq_36221862
  • 2017-05-27 12:38:26
  • 994

钓鱼Wi-Fi搭建实践

前言暑假回到家,无事可干,无意中看到家里还有一个闲置的路由器,于是搭建钓鱼Wi-Fi来试试玩。本文提到的技术只是交流目的,并无攻击意图。 钓鱼Wi-Fi 一般就是在公开场合无需提供密码的AP热点,这...
  • jmh1996
  • jmh1996
  • 2017-07-28 15:30:58
  • 754

如何伪造一封合格的钓鱼邮件

有幸参与了公司安全周之钓鱼邮件的策划与开发,虽然持续时间很短,但收获较大,主动点击邮件链接的人数超过了20%,主动提交密码的也超过了7%,说明提高安全意识之路还任重道远,更重要的是,从小伙伴的反馈中,...
  • yiifaa
  • yiifaa
  • 2017-11-07 19:12:26
  • 737
收藏助手
不良信息举报
您举报文章:贪心算法之钓鱼
举报原因:
原因补充:

(最多只允许输入30个字)