37:雇佣兵
- 總時間限制:
- 1000ms
- 內存限制:
- 65536kB
- 描述
-
雇佣兵的體力最大值為M,初始體力值為0、戰斗力為N、擁有X個能量元素。
當雇佣兵的體力值恰好為M時,才可以參加一個為期M天的戰斗期,戰斗期結束體力值將為0。在同一個戰斗期內,雇佣兵每連續戰斗n天,戰斗力就會上升1點,n為當前戰斗期開始時的戰斗力。
一個戰斗期結束后,雇佣兵需要用若干個能量元素使其體力恢復到最大值M,從而參加下一個戰斗期。每個能量元素恢復的體力值不超過當前的戰斗力。每個能量元素只能使用一次。
請問:雇佣兵的戰斗力最大可以到達多少。
- 輸入
- 一行包括三個整數M、N、X,相鄰兩個整數之間用單個空格隔開。M、N、X均為不超過10000的正整數。
- 輸出
- 輸出一個整數,為雇佣兵的最大戰斗力。
- 樣例輸入
-
5 2 10
- 樣例輸出
-
6
#include<cstdio> #include<iostream> #include<cmath> using namespace std; int n,m,x,engry; int main() { scanf("%d%d%d",&m,&n,&x); engry=n;//engry代表當前戰斗力 while(engry<=m&&x) { x-=ceil(double (m)/engry); if(x<0) break; engry+=floor(double (m)/engry); } cout<<engry; }
思路:如果剛開始他的戰斗力大於m ,那么戰斗m天湊不夠n天,所以他的戰斗力值不會增加