题目链接:这里
题意:有一个boss有hp点血,然后每秒钟回复reg。现在你有n个魔法,每个魔法只能在BOSS的血量大于p[i]%的时候使用,会给boss挂上一个每秒钟掉d[i]的buff。现在问你你怎么使用这个魔法,才能让boss死的最快。
解法:贪心,每一秒钟使用最厉害的技能就好了…… 然后直接暴力莽一波
//CF 37B
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
vector <pair<int, int> > ans;
int b[maxn], c[maxn], vis[maxn];
int main(){
int n, hp, reg;
scanf("%d%d%d", &n, &hp, ®);
for(int i = 0; i < n; i++) scanf("%d%d", &b[i], &c[i]);
int cur = hp, dmg = 0, t = 0, flag = 0;
while(cur > 0){
cur -= dmg;
cur += reg;
cur = min(cur, hp);
if(cur <= 0) break;
int pos = -1;
for(int i = 0; i < n; i++){
if(!vis[i] && b[i]*hp >= 100*cur){
if(pos == -1 || c[i] > c[pos]){
pos = i;
}
}
}
if(pos != -1){
vis[pos] = 1;
dmg += c[pos];
ans.push_back(make_pair(t, pos+1));
}
else{
if(cur == hp){
flag = 1;
break;
}
}
++t;
}
if(flag) return puts("NO"), 0;
else{
puts("YES");
printf("%d %d\n", t, ans.size());
for(int i = 0; i < ans.size(); i++){
cout << ans[i].first << " " << ans[i].second << endl;
}
}
return 0;
}

本文介绍了一种针对游戏中的Boss战快速击杀的算法。通过贪心策略选择合适的魔法技能,使得Boss的生命值能以最快速度降至0。文章提供了一个具体的实现案例,并通过代码示例展示了如何进行最优技能选择。
565

被折叠的 条评论
为什么被折叠?



