# 闯关游戏## 题目描述你参加了一个闯关游戏游戏共有 $n$ 关每关你需要挑选一个锦囊游戏开始时你共有 $m$ 个锦囊。锦囊是有有效期的第 $i$ 个锦囊的有效期截至第 $a_i$ 关第 $a_i+1$ 关及以后就再也不能使用这个锦囊。锦囊还有对应的分数第 $i$ 个锦囊的分数是 $b_i$使用这个锦囊过关就可以获得 $b_i$ 的分数;不使用锦囊过关则那一关不获得分数;每个锦囊只能使用至多 $
#include<bits/stdc++.h>
using namespace std;
// 本题思路:从后往前填充关卡,每次找当前能填的最高分的锦囊
const int N = 1005, M = 1005;
struct Data{
int score, timee;
bool use;
// use记录锦囊是否用过
} a[M];
// a[] 存储锦囊
int ans, n, m;
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; ++i)
scanf("%d%d", &a[i].timee, &a[i].score);
for(int i = n; i >= 1; --i){
// i枚举的是第i关
int id = 0;
// id存储目前可选锦囊中分数最高的锦囊的下标
for(int j = 1; j <= m; ++j){
// j枚举的是锦囊的下标
if(a[j].timee >= i && !a[j].use){
// 这个锦囊在第i个时刻还没有过期
if(id == 0 || a[j].score > a[id].score)
id = j;
// 做一次更新操作
}
}
if(id != 0){
ans += a[id].score;
a[id].use = true;
}
}
printf("%d\n", ans);
return 0;
}
原文地址: http://www.cveoy.top/t/topic/h6ea 著作权归作者所有。请勿转载和采集!