POJ_1042_贪心
题目描述:
每组数据给你n个胡,h小时时间,每个湖一次可钓鱼数量,每个湖每次钓鱼后下次可钓鱼数量的减少量,从每个湖到下一个湖所需时间。求最大钓鱼量。
要注意的是,刚开始在第一个湖,每次移动只能往下一个湖移动,每次钓鱼数量最多可减少到0。
若多种情况钓鱼数量一样,则取前面的湖钓鱼次数最多的。
思路:
先把时间统一。
可以按跑了多少个湖分n种情况,也就是最后呆在哪个湖。
对于每一种情况,减去跑路的时间,总的钓鱼的时间是一样的,问题就变成了,怎么在跑过的湖分配时间,使效益最大。
贪心,每次取最大值,湖的状态更新之后,再取最大值......
一直到时间耗光,上面的值相加就是这种情况下的钓鱼最大数量。
然后每种情况取最大值便是最终答案,另外,每种情况还需要一个数组保存每个湖钓鱼次数。
最后要注意的是,钓鱼数量一样取前面的湖钓鱼次数最多的,若当前每个湖钓鱼数量均为0,可以直接把剩余时间全部投入第一个湖,结束此次过程。
#include<iostream>
#include<cstdio>
using namespace std; int n,h,t[],f[],d[],ans[]; int main()
{
while(cin >> n && n)
{
cin >> h;
h = h*;
int i,j;
for(i = ;i <= n;i++) cin >> f[i];
for(i = ;i <= n;i++) cin >> d[i];
for(i = ;i < n;i++) cin >> t[i];
int sum = -;
for(i = ;i <= n;i++)
{
int point,temp_h = h,temp_sum = ,temp_f[],temp_ans[] = {};
for(j = ;j <= n;j++) temp_f[j] = f[j];
while(temp_h)
{
int maxf = ;
for(j = ;j <= i;j++)
{
if(temp_f[j] > maxf)
{
maxf = temp_f[j];
point = j;
}
}
if(maxf)
{
temp_ans[point] += ;
temp_sum += temp_f[point];
if(temp_f[point] >= d[point])
temp_f[point] -= d[point];
else
temp_f[point] = ;
}
else
{
temp_ans[] += temp_h;
break;
}
temp_h -= ;
}
if(h > t[i]*)
{
h -= t[i]*;
}
else
{
h = ;
} if(temp_sum > sum)
{
for(j = ;j <= n;j++)
{
ans[j] = temp_ans[j];
}
sum = temp_sum;
}
}
for(i= ;i < n;i++) cout << ans[i] << ", ";
cout << ans[n] << endl;
cout << "Number of fish expected: " << sum << endl;
cout<<endl;
}
return ;
}
POJ_1042_贪心的更多相关文章
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
- code vs 1098 均分纸牌(贪心)
1098 均分纸牌 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有 N 堆纸牌 ...
- 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...
- 【贪心】HDU 1257
HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...
随机推荐
- Java 中级 学习笔记 1 JVM的理解以及新生代GC处理流程
写在最前 从毕业到现在已经过去了差不多一年的时间,工作还算顺利,但总是离不开CRUD ,我觉得这样下去肯定是不行的,温水煮青蛙,势必有一天,会昏昏沉沉的迷失在温水里.所以,需要将之前学习JAVA 当中 ...
- Eclipse直接运行算法第4版例子(重定向和读取指定路径文件)
Eclipse直接运行算法第4版例子(重定向和读取指定路径文件) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://b ...
- Redis系列之----Redis的两种持久化机制(RDB和AOF)
Redis的两种持久化机制(RDB和AOF) 什么是持久化 Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望 ...
- Objectarx 相交矩形求并集 面域转多段线
测试结果: 主要思路:拾取一个点作为矩形的插入点,分别以该点进行两次jig操作,就能得到白色的两个相交的polyline,之后需要变成红色的封闭多段线.做法就是:求出两个白色矩形的面域,然后通过boo ...
- 微信小程序点击图片放大
WXML: <view class='imgList'> <view class='imgList-li' wx:for='{{imgArr}}'> <image cla ...
- mysql索引创建和使用细节(二)
上篇粗略记录当mysql字段类型是string,传入int类型参数后失效当问题. 现在测试下mysql字段是int类型,传参string类型会发生什么. 题外话,最近膝盖手术后还在家养伤中,只怪自己以 ...
- python中各种文件打开模式
在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...
- C语言编译成dll
首先c语言在开始要加上 #ifdef __cplusplus extern "C" { #endif …被导出的方法名称 #ifdef __cplusplus } #endif 不 ...
- jav设计模之的动态代理
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- mongdb角色的授权
开启cmd窗口切换到cd D:\programs\mongoDB\bin D:\programs\mongoDB\bin>mongo MongoDB shell version v3.4.6 c ...