zoukankan      html  css  js  c++  java
  • hdu 2616 Kill the monster

    题目大意:

      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
    ", minCount);
    60         else
    61             printf("-1
    ");
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/yongqiang/p/5689914.html
Copyright © 2011-2022 走看看