鱼塘钓鱼(树)
2016-04-08 21:45
357 查看
Description有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表:鱼塘编号1234
5
第1分钟能钓到的鱼的数量(1..1000)10
1420169每过1分钟钓鱼数的减少量(1..100)246
5
3当前鱼塘到下一个相邻鱼塘需要的时间(单位:分钟)3
5
44即:在第1个鱼塘中钓鱼第1分钟可钓到10条鱼,第2分钟只能钓到8条鱼,……,第5分钟以后再也钓不到鱼了。从第1个鱼塘到第2个鱼塘需要3分钟,从第2个鱼塘到第3个鱼塘需要5分钟,……给出一个截止时间T(T<1000),设计一个钓鱼方案,从第1个鱼塘出发,希望能钓到最多的鱼。假设能钓到鱼的数量仅和已钓鱼的次数有关,且每次钓鱼的时间都是整数分钟。Input输入文件fishing.in共5行,分别表示:第1行为N;第2行为第1分钟各个鱼塘能钓到的鱼的数量,每个数据之间用空格隔开;第3行为每过1分钟各个鱼塘钓鱼数的减少量,每个数据之间用空格隔开;第4行为当前鱼塘到下一个相邻鱼塘需要的时间;第5行为截止时间T;Output输出文件fishing.out仅一个整数(不超过maxlongint),表示你的方案能钓到的最多的鱼。Sample Input
5
第1分钟能钓到的鱼的数量(1..1000)10
1420169每过1分钟钓鱼数的减少量(1..100)246
5
3当前鱼塘到下一个相邻鱼塘需要的时间(单位:分钟)3
5
44即:在第1个鱼塘中钓鱼第1分钟可钓到10条鱼,第2分钟只能钓到8条鱼,……,第5分钟以后再也钓不到鱼了。从第1个鱼塘到第2个鱼塘需要3分钟,从第2个鱼塘到第3个鱼塘需要5分钟,……给出一个截止时间T(T<1000),设计一个钓鱼方案,从第1个鱼塘出发,希望能钓到最多的鱼。假设能钓到鱼的数量仅和已钓鱼的次数有关,且每次钓鱼的时间都是整数分钟。Input输入文件fishing.in共5行,分别表示:第1行为N;第2行为第1分钟各个鱼塘能钓到的鱼的数量,每个数据之间用空格隔开;第3行为每过1分钟各个鱼塘钓鱼数的减少量,每个数据之间用空格隔开;第4行为当前鱼塘到下一个相邻鱼塘需要的时间;第5行为截止时间T;Output输出文件fishing.out仅一个整数(不超过maxlongint),表示你的方案能钓到的最多的鱼。Sample Input
5
10 14 20 16 9
2 4 6 5 3
3 5 4 4
14Sample Output
76
解题思路:用堆和贪心的方法,先把各项数据读入并存储在数组里面,然后开始枚举最远走到的池塘编号,收集能够钓鱼的池塘的资料,接着把堆初始化,并用贪心选取鱼最多的池塘,最后输出最优解即可。
程序:
type
data=record
fish,lake:longint;
end;
var
heap:array[1..100]of data;
t,f,d:array[1..100]of longint;
ans,i,j,k,m,max,n,t1,time:longint;
procedure sift(i:longint);
var
a:data;
j:longint;
begin
a:=heap[i];
j:=i*2;
while j<=k do
begin
if (j
if a.fish
else break;
end;
heap[i]:=a;
end;
begin
readln(n);
for i:=1 to n do
read(f[i]);
readln;
for i:=1 to n do
read(d[i]);
readln;
for i:=1 to n-1 do
read(t[i]);
t :=0;
readln;
readln(m);
t1:=0;
max:=0;
for k:=1 to n do
begin
time:=m-t1;
ans:=0;
for i:=1 to k do
begin
heap[i].fish:=f[i];
heap[i].lake:=i;
end;
for i:=1 to k div 2 do
sift(i);
while (time>0) and (heap[1].fish>0) do
begin
inc(ans,heap[1].fish);
dec(heap[1].fish,d[heap[1].lake]);
sift(1);
dec(time);
end;
if ans>max then max:=ans;
inc(t1,t[k]);
end;
writeln(max);
end.
版权属于: Chris原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v0pq.html转载时必须以链接形式注明原始出处及本声明。
相关文章推荐
- 二叉树的后序遍历(树)
- 二叉树的中序遍历(树)
- 二叉树的前序遍历(树)
- USACO&nbsp;3.4&nbsp;美国血统
- 排序(树)
- 合并果子(树)
- 一个关于堆的程序(树)
- 查找二叉树(树)
- 对称二叉树(树)
- 二叉树输出(树)
- 2004年分区联赛普级组之三&nbsp;FBI树
- 最详细的 Android NavigationDrawer 开发实践总结
- 相似图片搜索——感知哈希算法
- Oracle RAC 单节点宕机 has a disk HB, but no network HB
- stm32f4xx系统总线架构
- 白话C++系列教程
- 全本论现代中国学人
- python中常用到的模块和包名称
- 二叉树遍历(树)
- 1999年分区联赛提高组之四&nbsp;邮票面…