C - Fight the Monster(暴力)
题意就不说了
思路:要分析好对什么进行枚举,如果对血量也进行枚举的话,至少要枚举到10^4,加上对攻击力和防御力进行枚举10^2 * 10^2,可能会TLE。
因为monster的血量是固定的,所以可以通过对攻击力和防御力枚举,求出最少需要的攻击次数,和这个攻击次数下保证的血量,每次比较取max即可。。。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<string> 6 #include<queue> 7 #include<algorithm> 8 #include<map> 9 #include<iomanip> 10 #include<climits> 11 #include<string.h> 12 #include<numeric> 13 #include<cmath> 14 #include<stdlib.h> 15 #include<vector> 16 #include<stack> 17 #include<set> 18 #define FOR(x, b, e) for(int x=b;x<=(e);x++) 19 #define REP(x, n) for(int x=0;x<(n);x++) 20 #define INF 1e7 21 #define MAXN 100010 22 #define maxn 1000010 23 #define Mod 1000007 24 #define N 1010 25 using namespace std; 26 typedef long long LL; 27 28 29 int main() 30 { 31 int mh, ma, md; 32 int yh, ya, yd; 33 int h, y, d; 34 cin >> yh >> ya >> yd; 35 cin >> mh >> ma >> md; 36 cin >> h >> y >> d; 37 int ans = 1 << 29, r, k; 38 for (int i = ya;i <= 200;++ i) //枚举yang的攻击力 39 for (int j = yd;j <= 100;++ j)//枚举yang的防御力 40 { 41 if (i <= md) continue; 42 r = ceil((double)mh/(i - md));//yang最少的攻击次数 43 k = max((ma - j)*r + 1, yh);//yang需要的最少血量 44 ans = min(ans, (k-yh)*h + (i-ya)*y + (j-yd)*d); 45 } 46 cout << ans << endl; 47 return 0; 48 }