• 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 }
  • 相关阅读:
    数字货币交易所数据标准格式
    Python3量化技术常用插件
    线上线下流量趋势
    数字货币做市技术——随机价格
    OKEX API v1 SDK基于 Python 实现
    CEOBI交易所接口文档
    递归拉取订单列表的方法
    XT交易所Websocket API
    XT交易所API
    获取合约日期
  • 原文地址:https://www.cnblogs.com/yongqiang/p/5689914.html
Copyright © 2020-2023  润新知