贪心+优先队列全wa求大佬调%%%
查看原帖
贪心+优先队列全wa求大佬调%%%
918894
XyGetItRightAker楼主2023/11/13 20:54
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N = 30;
int n, h, ans = 0;
int	f[N], d[N], t[N];
int main() {
	cin >> n >> h;
	for (int i = 1; i <= n; i++)cin >> f[i];
	for (int i = 1; i <= n; i++)cin >> d[i];
	for (int i = 2; i <= n; i++)cin >> t[i];
	h = h * 60;
	int wk = 0;
	int v = 0;
	for (int i = 1; i <= n; i++) {
		wk += t[i]*5;//总共花在走路上的时间
		int now = h - wk;//还有多少时间
		v = 0;
		if (now <= 0)break;
		struct node {
			int val, num;//鱼量,鱼塘
			int is_f;
			bool operator<(const node a)const {
				return val < a.val;
			}
		};
		priority_queue<node>s;
		for (int j = 1; j <= i; j++) {
			s.push({ f[j],j,1 });
		}
		int now_num = 1;
		while (!s.empty()) {
			node u = s.top();
			s.pop();
			if (now-u.num<0||u.val<0||u.num<now_num) {
				continue;
			}
			now_num = u.num;
			v += u.val;
			now -= 5;
			s.push({ u.val - d[u.num],u.num,0 });
		}
		ans = max(ans, v);
	}

	cout << ans;
	return 0;
}
2023/11/13 20:54
加载中...