37:雇佣兵 37:雇佣兵 提問 提問 總時間限制: 1000ms 記憶體限制: 65536kB描述 雇佣兵的體力最大值為M,初始體力值為0、戰鬥力為N、擁有X個能量元素。 當雇佣兵的體力值恰好為M時,才可以參加一個為期M天的戰鬥期,戰鬥期結束體力值將為0。在同一個戰鬥期內,雇佣兵每連續戰鬥n天,戰鬥 ...
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天,所以他的戰鬥力值不會增加