Created
September 15, 2018 04:13
-
-
Save completejavascript/7d246afe0913e0d637bb2e822cacc34e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
// Phải cho giá trị MAX lớn hơn ràng buộc đề bài | |
// Vì giá trị máu hoặc giáp có thể tăng lên | |
const int MAX = 2005; | |
const int Fire = 1; | |
const int Water = 2; | |
const int Air = 3; | |
int InitH, InitA; // Giá trị máu và giáp ban đầu | |
int MaxTime[MAX][MAX]; // Mảng lưu giá trị thời gian sống lớn nhất | |
// ứng với giá trị 'H' máu và 'A' giáp | |
/* | |
* Tìm giá trị lớn nhất của 2 số | |
* @PARAM: a, b : là 2 số đầu vào | |
* RETURN: số lớn hơn trong 2 số | |
*/ | |
int Max(int a, int b) | |
{ | |
if(a > b) return a; | |
return b; | |
} | |
/* | |
* Tìm thời gian sống lớn nhất với giá trị máu và giáp ban đầu | |
* @PARAM: health, armor lần lượt là lượng máu và giáp ban đầu | |
* RETURN: giá trị thời gian sống lớn nhất | |
*/ | |
int Check(int health, int armor) | |
{ | |
if(health <= 0 || armor <= 0) return -1; | |
// Giả sử lúc đầu ta đang đứng ở Air, ta sẽ nhảy lần lượt sang Fire rồi về Air | |
// Hoặc sang Water rồi về Air. Vì tại Air thì H và A đều tăng. | |
// Nếu nhảy sang Fire rồi về Air: máu giảm : 3 - 20 = -17 và giáp tăng: 2 + 5 = 7 | |
// Nếu nhảy sang Water rồi về Air: máu giảm: 3 - 5 = -2 và giáp giảm: -10 + 2 = -8 | |
if(MaxTime[health][armor] == -1) | |
MaxTime[health][armor] = | |
Max(Check(health - 17, armor + 7) + 2, Check(health - 2, armor - 8) + 2); | |
return MaxTime[health][armor]; | |
} | |
int main(int argc, char** argv) | |
{ | |
int T, test_case; | |
ios::sync_with_stdio(false); | |
//freopen("input.txt", "r", stdin); | |
for(int i = 0; i < MAX; i++) | |
for(int j = 0; j < MAX; j++) | |
MaxTime[i][j] = -1; | |
cin >> T; | |
for(test_case = 0; test_case < T; test_case++) | |
{ | |
// Nhập đầu vào | |
cin >> InitH >> InitA; | |
// In kết quả | |
cout << Check(InitH, InitA) << endl; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment