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 }

 

posted @ 2015-04-02 16:11  UsedRose  阅读(248)  评论(0编辑  收藏  举报