问题描述: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;
}
求解