36 lines
951 B
C++
36 lines
951 B
C++
#include <bits/stdc++.h>
|
||
using namespace std;
|
||
const int N = 510;
|
||
int n;
|
||
int t[N], r[N];
|
||
int ans;
|
||
/*
|
||
此题采用贪心算法,从最后一个时段开始,选择在该时段内完成有奖励的小游戏中找奖励最大的完成,
|
||
时间复杂度为O(N^2)
|
||
*/
|
||
int main() {
|
||
cin >> n;
|
||
for (int i = 1; i <= n; i++)
|
||
cin >> t[i];
|
||
|
||
for (int i = 1; i <= n; i++)
|
||
cin >> r[i];
|
||
|
||
// 从最后一个时段开始枚举
|
||
for (int i = n; i >= 1; i--) {
|
||
int k = 0; // 找到i时段之内最大分值位置
|
||
int m = 0; // 最大分值
|
||
for (int j = 1; j <= n; j++) {
|
||
if (t[j] >= i && r[j] > m) {
|
||
m = r[j];
|
||
k = j;
|
||
}
|
||
}
|
||
if (k != 0) { // 如果找到了
|
||
ans += r[k]; // 加分
|
||
r[k] = 0; // 清零,防止重复
|
||
}
|
||
}
|
||
cout << ans << endl;
|
||
return 0;
|
||
} |