1373:鱼塘钓鱼(fishing)

简介: 1373:鱼塘钓鱼(fishing)

1373:鱼塘钓鱼(fishing)

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表:

鱼塘编号每1分钟能钓到的鱼的数量(1..1000)每1分钟能钓鱼数的减少量(1..100)当前鱼塘到下一个相邻鱼塘需要的时间(单位:分钟)11023214453206441654593

即:在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼,第2分钟内只能钓到8条鱼,……,第5分钟以后再也钓不到鱼了。从第1个鱼塘到第2个鱼塘需要3分钟,从第2个鱼塘到第3个鱼塘需要5分钟,……

给出一个截止时间T(T<1000),设计一个钓鱼方案,从第1个鱼塘出发,希望能钓到最多的鱼。

假设能钓到鱼的数量仅和已钓鱼的次数有关,且每次钓鱼的时间都是整数分钟。

【输入】

共5行,分别表示:

第1行为N;

第2行为第1分钟各个鱼塘能钓到的鱼的数量,每个数据之间用一空格隔开;

第3行为每过1分钟各个鱼塘钓鱼数的减少量,每个数据之间用一空格隔开;

第4行为当前鱼塘到下一个相邻鱼塘需要的时间;

第5行为截止时间T。

【输出】

一个整数(不超过2^31−1),表示你的方案能钓到的最多的鱼。

【输入样例】

5

10 14 20 16 9

2 4 6 5 3

3 5 4 4

14

【输出样例】

76

1. #include <iostream>
2. #include <cstdio>
3. #include <cstring>
4. using namespace std;
5. int n,fish[105],reduce_fish[105],minute[105];
6. int size,heap[100005];//大堆
7. int T,hlake[100005];
8. void put(int x,int lake){//增加元素
9.  int i,j,t;
10.   size++;heap[size]=x;
11.   hlake[size]=lake;i=size;
12.   while(i>1){//向上调整
13.     j=i/2;
14.     if(heap[i]<=heap[j]) return;//子结点小于等于父结点 返回
15.     //子结点比父结点大 就交换
16.     t=heap[i];heap[i]=heap[j];heap[j]=t;
17.     t=hlake[i];hlake[i]=hlake[j];hlake[j]=t;
18.     i=j;
19.   }
20. }
21. void Heap(int erw){//将堆中第i个元素向下调整
22.   int i=erw,j,t;
23.   while(i*2<=size){
24.     j=i*2;
25.     if(j<size && heap[j+1]>heap[j]) j++;//右孩子大于左孩子 使用右孩子
26.     if(heap[i]>=heap[j]) return;//父结点大于等于子结点 返回
27.     //父结点小于子结点 交换
28.     t=heap[i];heap[i]=heap[j];heap[j]=t;
29.     t=hlake[i];hlake[i]=hlake[j];hlake[j]=t;
30.     i=j;
31.   }
32. }
33. int main()
34. {
35.   int i,j,m,p=0,ans=0;
36.   cin>>n;
37.   for(i=1;i<=n;i++) cin>>fish[i];
38.   for(i=1;i<=n;i++) cin>>reduce_fish[i];
39.   for(i=1;i<=n-1;i++) cin>>minute[i];
40.   cin>>m;
41.   for(i=1;i<=n;i++){//枚举最后一个到达的鱼塘
42.     T=m-p;
43.     int sum=0;size=0;
44.     for(j=1;j<=i;j++) put(fish[j],j);//入堆
45.     while(T>0 && heap[1]>0){//时间没有结束 且这个鱼塘里还有鱼
46.       sum+=heap[1];//增加大堆顶
47.       heap[1]-=reduce_fish[hlake[1]];//鱼塘鱼量减少
48.       Heap(1);//调整堆
49.       T--;//时间减少
50.     }
51.     if(sum>ans) ans=sum;//更新最大值
52.     p+=minute[i]; //调整到下一个鱼塘                  
53.   }
54.   cout<<ans;
55. return 0;
56. }


相关文章
|
3月前
|
安全 网络安全 数据安全/隐私保护
钓鱼攻击 (Phishing)
【8月更文挑战第17天】
47 3
|
安全 网络安全 数据安全/隐私保护
网络安全攻击方式之"社会工程学"
网络安全攻击方式之"社会工程学"
|
网络安全 数据安全/隐私保护
《网络安全0-100》假托和钓鱼
《网络安全0-100》假托和钓鱼
82 0
|
安全 数据安全/隐私保护 网络架构
解密常见的社会工程学攻击
社会工程学的手段日渐成熟,其技术含量也越来越高。社会工程学在实施之前必须掌握「心理学」、「人际关系」、「行为学」等知识与技能,以便收集和掌握实施进攻行为所需的资料和信息。不了解社会工程学的小伙伴可以点击链接: 什么是社会工程学 。
354 0
|
安全 网络安全 数据安全/隐私保护
网络钓鱼这样“防”
所有人都觉得自己不会成为网络钓鱼攻击的受害者,然而,事实果真如此吗? 现如今,网络钓鱼攻击早已被认定为是公司和个人面临的最常见的安全威胁之一,这绝不是空穴来风。
475 0
网络钓鱼这样“防”
|
安全
警惕垃圾邮件借加沙新闻进行钓鱼攻击
  根据外媒最新报道,电脑犯罪分子最近尝试利用看起来像来自CNN.com的邮件来窃取用户银行帐号。据悉,该邮件会让用户误以为是CNN.com网站提供的关于加沙新闻的Flash动画内容。   昨晚,美国RSA实验室发现有发送至中国的可疑电子邮件,并声称对它进行了关闭处理。
997 0
|
安全 数据安全/隐私保护
|
安全 数据安全/隐私保护