#include <iostream>
#include <map>
#include <vector>
#include <queue>
using namespace std;
vector<int> fish, myDistance;
map<int,int> myMap;
int n, t;
priority_queue<int> myQueue;
int solve(int time, int i)
{
//cout << time << " and " << i << endl;
int ans = 0;
for(int k = fish[i]; k >= 0; k -= myMap[i])
{
myQueue.push(k);
}
priority_queue<int> temp = myQueue;
for(int k = time; k > 0 && !temp.empty(); k --)
{
ans += temp.top();
temp.pop();
}
return ans;
}
int main()
{
cin >> n;
fish.resize(n + 1);
myDistance.resize(n + 2);
for(int i = 1; i <= n; i ++) cin >> fish[i];
for(int i = 1; i <= n; i ++)
{
int temp;
cin >> temp;
myMap.insert({i,temp});
}
myDistance[0] = 0;
for(int i = 1; i <= n - 1; i ++)
{
cin >> myDistance[i];
myDistance[i] = myDistance[i] + myDistance[i - 1];
}
cin >> t;
int res = -9999;
for(int i = 1; i <= n; i ++)
{
int remainTime = t;
remainTime -= myDistance[i - 1];
if(remainTime > 0)
res = max(solve(remainTime, i), res);
}
cout << res;
return 0;
}
作者:Yuze_Neko
链接:https://www.acwing.com/file_system/file/content/whole/index/content/12720227/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
贪心 + 前缀和 + 优先队列
时间最坏O(2n + n^2)