测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A40888. 技能升级本题总分:25 分【问题描述】小蓝最近正在玩一款 RPG 游戏。他的角色一共有 N 个可以加攻击力的技能。其中第 i 个技能首次升级可以提升 Ai 点攻击力,以后每次升级增加的点数都会减少 Bi。⌈ Ai Bi⌉ (上取整) 次之后,再升级该技能将不会改变攻击力。现在小蓝可以总计升级 M 次技能,他可以任意选择升级的技能和次数。请你计算小蓝最多可以提高多少点攻击力?【

填空题 困难

题目描述

技能升级

本题总分:25 分

【问题描述】

小蓝最近正在玩一款 RPG 游戏。他的角色一共有 N 个可以加攻击力的技

能。其中第 i 个技能首次升级可以提升 Ai 点攻击力,以后每次升级增加的点数

都会减少 Bi。⌈ Ai Bi⌉ (上取整) 次之后,再升级该技能将不会改变攻击力。

现在小蓝可以总计升级 M 次技能,他可以任意选择升级的技能和次数。请

你计算小蓝最多可以提高多少点攻击力?

【输入格式】

输入第一行包含两个整数 N 和 M。

以下 N 行每行包含两个整数 Ai 和 Bi。

【输出格式】

输出一行包含一个整数表示答案。

【样例输入】

3 6

10 5

9 2

8 1

【样例输出】

47

参考答案

#include<iostream> #include<cstdio> #include<set> #include<algorithm> using namespace std; int n,m; const int N=1e5+5; int c[N],cnt[N]; #define x first #define y second typedef pair<int,pair<int,int> > PII; pair<int,pair<int,int> > a[N]; int main(){ cin >> n >> m;//m是可以升级的次数 int ans=0; for(int i=1;i<=n;++i){ scanf("%d%d",&a[i].x,&a[i].y.x); if(a[i].x%a[i].y.x==0)a[i].y.y=a[i].x/a[i].y.x; else a[i].y.y = a[i].x/a[i].y.x + 1; } sort(a+1,a+n+1,greater<PII>() ); for(int i=1;i<=m;++i){ ans+=a[1].x; a[1].x-=a[1].y.x; cnt[a[1].x]++; if(cnt[a[1].x]>=a[1].y.y)a[1].x=0; sort(a+1,a+n+1,greater<PII>()); } cout<<ans; return 0; }
上一题 下一题