玄学问题
查看原帖
玄学问题
575423
Coding_Zhouzehao楼主2022/4/4 22:17

问题描述:while(i--)和for(;i>0;--i)循环次数好像并没有区别诶,可是第三个样例for(;i>0;--i)能过,while(i--)过不了

第三次样例输入:
10
5
81 138 84 124 91 68 131 131 144 90
13 18 14 11 17 10 15 15 16 12
10 11 4 6 6 6 7 2 11

样例输出:
2097

while(i--)输出的:4889

见get_ans函数内while(left--)和for(;left>0;left--)部分

#include<iostream>
#include<queue>
using namespace std;
const int MAXN = 20;
const int MAXH = 30;
int f[MAXN], d[MAXN], t[MAXN];
int n, h;
int get_ans(int end, int left)
{
	priority_queue<pair<int, int>>  pq;
	for (int i = 1; i <= end; i++)pq.push(make_pair(f[i], i));
	int res = 0;
	//while (left--)
	for(;left > 0;--left)
	{
		int val = pq.top().first;
		int i = pq.top().second;
		pq.pop();
		if (val <= 0)break;
		res += val;
		pq.push(make_pair(val - d[i], i));
	}
	return res;
}
int main()
{
	cin >> n >> h;
	h = h * 60 / 5;//时间单位的转换
	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];
	int spend = 0;
	int ans = 0;
	for (int i = 1; i <= n; i++)
	{
		spend += t[i];
		int left = h - spend;
		ans = max(ans, get_ans(i, left));
	}
	cout << ans;
	return 0;
}

求解

2022/4/4 22:17
加载中...