| Time Limit: 2000MS | Memory Limit: 32768K | |
| Total Submissions: 30281 | Accepted: 9124 |
Description
Input
Output
Sample Input
2 1 10 1 2 5 2 4 4 10 15 20 17 0 3 4 3 1 2 3 4 4 10 15 50 30 0 3 4 3 1 2 3 0
Sample Output
45, 5 Number of fish expected: 31 240, 0, 0, 0 Number of fish expected: 480 115, 10, 50, 35 Number of fish expected: 724
Source
解析:由于是从第一个湖出发的。并且全部的湖都是一字排开的,所以仅仅需枚举他走过的湖泊数X就可以。即先如果他从湖1走到湖X。则路上总共花了T= T1 + T2 + T3 + ... + Tx。在这个前提下。就能够觉得他有能力在1~X之间的不论什么两个湖之间“瞬移”。即在任一时刻能够任选一个1~X中的湖钓鱼。
(想一想为什么?事实上这跟汽车加油的道理是一样的,在每一个湖的钓鱼顺序能够不是依次来的,你可能觉得总时间肯定比这个花得多。事实上不是的,顺序事实上是不影响结果的。由于假如我要先去湖1钓5分钟,接着去湖2钓5分钟。再接着回来湖1钓5分钟,这个过程事实上相当于先在湖1钓5+5=10分钟,然后再去湖2钓5分钟)。因此仅仅需一直贪心的选择当前能钓到鱼最多的湖就可以。还有就是贪心选择的时候。若有同样的湖时,优先选择编号较小的湖。
AC代码:
#include <algorithm>
#include <queue>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int maxn = 30;
int t[maxn], f[maxn], d[maxn];
struct node{
int id;
int f;
int d;
friend bool operator <(node a, node b){ //注意从大到小排,要重载 '<'
if(a.f == b.f) return a.id > b.id; //若鱼数相等,则选择id较小的
return a.f < b.f;
}
};
node fish[maxn];
int times[maxn][maxn]; //记录每一个湖钓鱼时间
int main(){
#ifdef sxk
freopen("in.txt", "r", stdin);
#endif // sxk
int n, h;
while(scanf("%d", &n)!=EOF && n){
scanf("%d", &h);
memset(times, 0, sizeof(times));
h = h * 12;
for(int i=1; i<=n; i++){ scanf("%d", &fish[i].f); fish[i].id = i; }
for(int i=1; i<=n; i++) scanf("%d", &fish[i].d);
for(int i=1; i<=n-1; i++) scanf("%d", &t[i]);
int maxans = 0;
int maxk = 1;
for(int i=1; i<=n; i++){
int tc = 0;
for(int j=1; j<i; j++) tc += t[j];
priority_queue<node> p;
for(int j=1; j<=i; j++) p.push(fish[j]); //将湖1~X的鱼量放入从大到小排的优先队列
int ans = 0;
int t = h - tc;
for(int j=1; j<=t; j++){
node foo = p.top();
ans += foo.f;
times[i][foo.id] += 5;
p.pop();
p.push(node{foo.id, max(foo.f - foo.d, 0), foo.d});
}
if(maxans < ans){
maxans = ans;
maxk = i;
}
}
for(int i=1; i<n; i++) printf("%d, ", times[maxk][i]);
printf("%d\n", times[maxk][n]);
printf("Number of fish expected: %d\n\n", maxans);
}
return 0;
}
POJ 1042 Gone Fishing (贪心)(刘汝佳黑书)
原文:http://www.cnblogs.com/mengfanrong/p/5186298.html