UVa 757 - Gone Fishing
题目大意:John有h的时间可以去钓鱼,有n湖可钓鱼,以5分钟为时间单位,每个湖初始每个单位时间可钓f条鱼,每下一个时间单位数量减少d条。同时,John只能从1号湖往后走进行钓鱼,湖之间的距离需要t个单位时间。求最多能钓到最多少鱼,并给出方案。
“贪心+暴力,从近至远依次枚举可以到达的钓鱼地点,用总时间减去中途消耗的时间,这样就可以将其当成在各个钓鱼地点之间随意转移(实际题目中给出是单方向前行的),然后在已到达的最远的钓鱼地点之内的所有钓鱼地点上按每次能钓到的鱼的最大值做贪心,若时间用不完,则剩余时间加到第一个钓鱼地点上。注意,钓鱼地点最初的钓鱼值可能为零。”
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define MAXN 30 struct Lake
{
int id, f;
bool operator < (const Lake& l) const
{
if (f != l.f) return f < l.f;
else return id > l.id;
}
}; int f[MAXN], d[MAXN], t[MAXN], fish[MAXN], res[MAXN]; int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int n;
bool first = true;
while (scanf("%d", &n) && n)
{
int h;
scanf("%d", &h);
for (int i = ; i < n; i++)
scanf("%d", &f[i]);
for (int i = ; i < n; i++)
scanf("%d", &d[i]);
t[] = ;
for (int i = ; i < n; i++)
{
scanf("%d", &t[i]);
t[i] += t[i-];
}
int ans = -;
for (int i = ; i < n; i++) // the last lake arrived
{
int time = h * ;
if (t[i] > time) break;
time -= t[i];
priority_queue<Lake> q;
Lake tmp;
for (int j = ; j <= i; j++)
if (f[j])
q.push( (Lake){j, f[j]} );
memset(fish, , sizeof(fish));
int sum = ;
while (!q.empty() && time > )
{
tmp = q.top();
q.pop();
sum += tmp.f;
int id = tmp.id;
fish[id]++;
time--;
tmp.f -= d[id];
if (tmp.f > ) q.push(tmp);
}
fish[] += time;
if (sum > ans)
{
ans = sum;
memcpy(res, fish, sizeof(fish));
}
}
if (first) first = false;
else printf("\n");
for (int i = ; i < n; i++)
printf("%d%s", res[i]*, (i==n-) ? "\n" : ", ");
printf("Number of fish expected: %d\n", ans);
}
return ;
}
UVa 757 - Gone Fishing的更多相关文章
- uva 757
贪心 优先队列 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> ...
- <算法竞赛入门经典> 第8章 贪心+递归+分治总结
虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- UVA 816 - Abbott's Revenge(BFS)
UVA 816 - Abbott's Revenge option=com_onlinejudge&Itemid=8&page=show_problem&category=59 ...
- UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
随机推荐
- 免费vpn:SoftEther VPN
Google it. 注意下载2.0版的,不要下载最新版的.
- Excel相关问题
Excel默认永远使用最后安装的那个Excel版本打开.但是如果有一个Excel已经启动了,则使用那个Excel打开. 1.打开“开发工具”选项卡2007中:[Excel选项]-[常用]2010中:[ ...
- leveldb性能分析
Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计.特别是LSM算法. 那 ...
- memcache command
http://www.cnblogs.com/jeffwongishandsome/archive/2011/11/06/2238265.html
- java删除文件夹 Java中实现复制文件或文件夹
删除文件夹 import java.io.File; public class DeleteDir { /** * @param args */ public static void main(Str ...
- C#入门经典第11章集合-1
- 我也谈javascript闭包
1.什么是闭包呢?Whenever you see the function keyword within another function, the inner function has acces ...
- List转DataSet
public DataSet ConvertToDataSet<T>(IList<T> list) { if (list == null || list.Count <= ...
- ARM指令集学习总结-转载
ARM指令集比较简单,本文介绍ARM指令集中需要注意和不易理解的地方. 一.ARM指令集是32位的,程序的启动都是从ARM指令集开始,包括所有异常中断都是自动转化为ARM状态,并且所有的指 ...
- Fastjson简单使用方法
一.简单数据的序列化 pubic class UserInfo implements Serializable{ private String name; private int age; publi ...