题目:
输入:
3
1
4 5 6
1 2 1
1 2
输出:
35
思路:
用贪心的思路模拟钓鱼过程,如果在一个鱼塘里每分钟钓到的鱼(yt[i].zs/5)大于等于(在下一个鱼塘钓到的鱼)/(走到下一个鱼塘+钓五分钟鱼的时间)及yt[i+1].zs/(5+yt[i].time*5)则继续在这个池塘里钓鱼(使每分钟钓鱼的收益最高),反之则走到下一个鱼塘。把模拟过程中每一步钓到的鱼加起来得到sum。
#include<iostream>
#include <algorithm>
using namespace std;
struct jgt{
double zs,sj,time;
}yt[120];//结构体储存鱼塘的数据:第一个5分钟的钓鱼数量、再钓鱼5分钟的鱼量减小值p、到第i+1个湖泊所需要的时间
int n;
int main(){
int t;
cin>>t;
cin>>n;
n=n*60;
for(int i=0;i<t;i++){
cin>>yt[i].zs;
}
for(int i=0;i<t;i++){
cin>>yt[i].sj;
}
for(int i=0;i<t-1;i++){
cin>>yt[i].time;
}
yt[t].zs=-1;//设为-1,永远无法到达,防止越界
int i=0,sum=0;
while(n){//模拟过程,直到n(可用时间)为0则结束模拟
if(yt[i].zs/5>=yt[i+1].zs/(5+yt[i].time*5)){//第一种情况
sum+=yt[i].zs;
yt[i].zs-=yt[i].sj;
n-=5;
}
else if(yt[i].zs/5<yt[i+1].zs/(5+yt[i].time*5)){//反之
i++;
sum+=yt[i].zs;
yt[i].zs-=yt[i].sj;
n-=yt[i-1].time*5+5;
}
}
cout<<sum;
return 0;
}