J. 铁刀磨成针
题目简介:
给定一把刀的初始攻击力和磨刀石的个数,每回合按顺序包括一下两个阶段
- 磨刀阶段:可以选择花费一单位磨刀石提升刀的攻击力一点(每回合最多一次);
- 攻击阶段:可以选择攻击,会对敌方造成等同于刀攻击力的伤害、并使刀的攻击力减一(每回合最多一次)。刀的攻击力归零时会损坏、此后再也不能攻击。
求
个回合可造成的最大攻击力
思路:
首先可以观察到:磨刀一定是从第一回合开始连续磨到不能磨为止,因为早磨刀在任何情况下都不会吃亏。所以磨刀策略是固定的。
所以我们只需要枚举从什么时候开始砍即可
代码如下
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int t,n,x,y;
LL dc(LL a,LL b)
{
LL cnt=(a*b)-b*(b-1)/2;
return cnt;
}
LL check()
{
LL ans=0;
for(LL t=1;t<=min(n,y);t++)
{
LL tmp=0;
LL atk=x+t,s1=min(n,y)-t;
tmp+=atk*s1;
tmp+=dc(atk,min(atk,n-min(n,y)+1ll));
ans=max(ans,tmp);
}
return ans;
}
int main()
{
cin>>t;
while(t--)
{
cin>>n>>x>>y;
cout<<check()<<endl;
}
return 0;
}