Skip to content

Instantly share code, notes, and snippets.

@completejavascript
Created September 15, 2018 04:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save completejavascript/7d246afe0913e0d637bb2e822cacc34e to your computer and use it in GitHub Desktop.
Save completejavascript/7d246afe0913e0d637bb2e822cacc34e to your computer and use it in GitHub Desktop.
#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