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 }
  • 相关阅读:
    php获取某年某月的天数
    处理银行卡每隔4位数用空格隔开(正则表达式)
    刚看到一个前端面试题, 左边固定,右边自适应, 就根据自己想的自己写了下试试
    Yii中利用filters来控制访问
    Yii中使用RBAC完全指南
    自动把 替换成<p></p>
    统计汉字
    php执行linux函数
    java 与 R 相互调用
    Deep Learning 深度学习 学习教程网站集锦(转)
  • 原文地址:https://www.cnblogs.com/yongqiang/p/5689914.html
Copyright © 2011-2022 走看看