PKU 1042 Gone Fishing 解题报告(枚举 + 贪心)
来源:互联网 发布:校园网络管理方案 编辑:程序博客网 时间:2024/05/17 22:48
PKU 1042 Gone Fishing 解题报告(枚举 + 贪心)
对于这道题,关键是理解题意。
题意:有n个湖在沿着一条直线分布着(1,2,3,4……n),一个人将花h个小时从第1个湖出发,沿着这条路钓鱼,用t[i](1 <= i < n)表示从第i个湖走到第i + 1个湖所花的时间,如果他要在第i个湖钓鱼,每次垂钓时间为5分钟,所能钓到的鱼数为: (1)d[i](d[i] <= f[i])(2)f[i](f[i] <= d[i])(3)0(f[i] = 0) f[i]表示第i个湖鱼的数量,f[i]随着在该湖的垂钓次数的时间而递减,每次递减量为该次的钓鱼量。(注:假设垂钓者到达最远到达第i湖垂钓,则各相邻湖的距离只算一次.)
解法:枚举 + 贪心
我们每次枚举垂钓者最远到达第i(1 <= i <= n)个湖垂钓,则best[i]表示此状态下最优的钓鱼数,而在此状态下,垂钓者的垂钓次数为12 * h - ∑t[j] (1 <= j < i),每次选择当前某个湖所能钓到的鱼数进行垂钓,就能得到best[i]。
则最终答案为ans = max(best[i]) (1 <= i <= n)(当有多个最优解时,按stay[i](在第i个湖垂钓的次数)依次比较,先比较这些最优解的stay[1],取stay[1]最大的方案,若stay[1]都相同,则比较stay[2],依此类推)
源代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 26;
int f[MAXN], d[MAXN], t[MAXN];
struct Lake {
int f, i;
bool operator < (const Lake & l)const {
if(l.f != f) return f < l.f;
return i > l.i;
}
}lake[MAXN];
int main()
{
int n, h, maxfish, sum;
int s[MAXN], stay[MAXN];
while(cin >> n && n) {
int i, j, h;
cin >> h;
h *= 12;
for(i = 1; i <= n; i++) cin >> f[i];
for(i = 1; i <= n; i++) cin >> d[i];
for(i = 1; i <= n-1; i++) cin >> t[i];
maxfish = -1;
for(i = 1; i <= n; i++) {
sum = 0;
memset(s, 0, sizeof(s));
for(j = 1; j <= i; j++) {
lake[j-1].f = f[j];
lake[j-1].i = j;
}
make_heap(lake, lake + i);
for(int tm = 1; tm <= h; tm ++) {
pop_heap(lake, lake + i);
int lake_f = lake[i-1].f;
int lake_i = lake[i-1].i;
sum += lake_f;
s[lake_i] ++;
lake[i-1].f = (lake_f - d[lake_i] > 0) ? (lake_f - d[lake_i]) : 0;
push_heap(lake, lake + i);
}
if(sum > maxfish) {
maxfish = sum;
memcpy(stay, s, sizeof(s));
}
h -= t[i];
}
for(i=1;i<=n-1;i++)
cout << stay[i] * 5 << ", ";
cout << stay[n] * 5 <<endl;
cout << "Number of fish expected: " << maxfish << endl << endl;
}
return(0);
}
- PKU 1042 Gone Fishing 解题报告(枚举 + 贪心)
- POJ 1042 Gone Fishing(贪心+枚举)
- POJ 1042 Gone fishing(枚举+贪心)
- 1042 Gone Fishing(枚举+贪心)
- 1042 Gone Fishing(枚举+贪心)
- 1042 Gone Fishing 解题报告
- NYOJ 30 && POJ 1042 Gone Fishing(枚举+贪心)
- poj 1042 gone fishing 贪心+枚举
- POJ 1042 Gone Fishing(贪心+枚举)
- POJ-1042-Gone Fishing-枚举+贪心
- POJ 1042 Gone Fishing 贪心 枚举
- poj 1042 Gone Fishing 枚举+贪心
- Poj-1042-Gone Fishing-枚举+贪心
- Gone Fishing(Poj1042)(贪心+枚举)
- NYOJ 30 Gone Fishing(枚举+贪心)
- pku 1042 Gone Fishing
- pku 1042 Gone Fishing
- pku 1042 Gone Fishing
- 公司面试经典问题
- job aborted; reason = mpd disappeared
- .NET和Java前景
- 面向对象是个骗局?!
- Real UID, Effective UID, Saved UID区别
- PKU 1042 Gone Fishing 解题报告(枚举 + 贪心)
- (转)关于volatile和原子操作研究的插曲
- ExtJs之TreePanel动态绑定
- 养生学
- 缺德保姆,竟然给一岁孩子吃安眠药!
- mysql 定义方法(function) 存储过程(procedure)
- Delphia5开发指南->第28章(2010年10月08日星期五)
- at 计划任务高级详细使用方法
- CC2430通过中断来接收无线射频数据