【题目链接】1262. 鱼塘钓鱼 - AcWing题库
输入样例:
5
10 14 20 16 9
2 4 6 5 3
3 5 4 4
14
输出样例:
76
【代码及详细注释】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=110;
int a[N],b[N],sp[N],d[N],n,t,cost[N];
int get_yu(int k)
{
return max(0,a[k]-b[k]*cost[k]);
}
ll solve(int x,int tt)
{
ll res=0;
memset(cost,0,sizeof cost);//初始化在每个鱼塘上花费的时间为0
for(int i=0;i<tt;i++)//遍历每一次钓鱼的点
{
int t1=1;
for(int j=2;j<=x;j++)
{
if(get_yu(j)>get_yu(t1))//如果从第j个鱼塘能钓到更多的鱼就去第j个鱼塘
{
t1=j;
}
}
res+=get_yu(t1);
cost[t1]++;
}
return res;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
for(int i=2;i<=n;i++)
{
cin>>sp[i];
sp[i]+=sp[i-1];//前缀和处理到每个鱼塘所需要花费的时间
}
cin>>t;
ll res=0;
for(int i=1;i<=n;i++)
{
res=max(res,solve(i,t-sp[i]));
//路线中包括前i个点,花费t-sp[i]时间去钓鱼
}
cout<<res<<endl;
return 0;
}