码迷,mamicode.com
首页 > 其他好文 > 详细

杭电OJ_hdu2616_Kill the monster

时间:2016-07-20 22:57:57      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:

  yifenfei的家乡附近有一座山,山里住着一只大怪物。作为家乡的英雄,yifenfei决定去杀了这只怪物。

  现在我们知道yifenfei有n种法术,怪物的血量为m,当怪物的 血量 <= 0 的时候意味着怪物被杀死了。在不同的时间使用不同的魔法,就有不一样的效果。现在通过表达式(A, M),告诉你每种魔法的效果。A表示这魔法能打掉怪兽A点血。M表示但怪兽的 血量 <= M的时候用这种魔法,魔法伤害加倍。

 

输入:

  输入包含许多测试数据。每个测试前两个整数n,m(2 < n < 10, 1 < m < 10^7),n表示yifenfei的法术数量,m表示怪兽血量。接下来的n行,每行表示一个魔法 (Ai,Mi)。(0 < Ai, Mi <=m)。

 

输出:

  每个用例输出一个整数,表示yifenfei杀死怪兽最少用的法术数目。如果yifenfei不能杀死怪兽输出-1。

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 //记录法术伤害情况的数据结构
 6 typedef struct Node
 7 {
 8     int A;
 9     int M;
10 }Node;
11 
12 Node spells[10];
13 bool visit[10]; //标记数组,判断某法术是否使用过
14 int spellCount; //feifei拥有的法术数量
15 int minCount;   //打死怪兽需要用的最少的法术数量
16 
17 /* 数据初始化函数 */
18 void init()
19 {
20     minCount = 10;
21     memset(visit, 0, sizeof(visit));
22 }
23 
24 /* dfs搜索 */
25 void dfs(int count, int HP)
26 {
27     if (spellCount == count && HP > 0) //法术全用完了,怪兽HP > 0,返回false
28         return;
29     else if (minCount <= count && HP > 0) //当前用的法术数量比minCount还多,怪兽HP > 0,说明继续搜索没有价值了,返回false
30         return;
31     else if (minCount > count && HP <= 0) //当前使用的法术数量比minCount小,怪兽HP <=0,说明找到一种比之前好的方法。返回true
32     {
33         minCount = count;
34         return;
35     }
36 
37     for (int i = 0; i < spellCount; ++i)
38     {
39         if (false == visit[i])
40         {
41             visit[i] = true;
42             int harm = (HP <= spells[i].M ? 2 * spells[i].A : spells[i].A);
43             dfs(count + 1, HP - harm);
44             visit[i] = false;
45         }
46     }
47 }
48 
49 int main(void)
50 {
51     int HP;     //moster‘s HP
52     while (scanf("%d %d", &spellCount, &HP) != EOF)
53     {
54         init();
55         for (int i = 0; i < spellCount; ++i)
56             scanf("%d %d", &spells[i].A, &spells[i].M);
57         dfs(0, HP);
58         if ( 10 != minCount )
59             printf("%d\n", minCount);
60         else
61             printf("-1\n");
62     }
63     return 0;
64 }

 

杭电OJ_hdu2616_Kill the monster

标签:

原文地址:http://www.cnblogs.com/yongqiang/p/5689914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!