时间限制: 1000ms
单点时限: 1000ms
内存限制: 256MB

描述

wuzhengkai是一个炉石传说玩家。

有一天,他碰到对面上了个诺兹多姆并上了嘲讽和圣盾。

诺兹多姆是一个有8点攻击力和8点生命值的随从,这意味着他能够承受总量小于8点的伤害而不死亡,且对于任何攻击他的单位造成8点伤害。

嘲讽意味着当诺兹多姆死亡之前你不能攻击对方玩家。圣盾意味着诺兹多姆受到的第一次伤害为0,然后诺兹多姆失去圣盾。

诺兹多姆的能力是让回合时间变为15s,这导致wuzhengkai来不及计算了。

wuzhengkai场上有一些随从,每个随从有其攻击力和生命值,含义同上。

同时一些随从也具有圣盾。一些随从还具有风怒,使得他若在第一次攻击后存活,则还能够攻击一次。

他想让你帮忙算出这回合他能带给对方玩家多少伤害。

输入

输入包含多组数据。

第一行一个整数n,(0<=n<=7),表示wuzhengkai场上有n个随从。

接下来n行,每行首先两个整数Att和Hp(0<Att<=10,0<Hp<=10),表示该随从的攻击力和生命值

接下来每行可能还有0~2个字母跟在这两个整数之后。字母D表示圣盾,字母W表示风怒。

每行中的内容以一个空格隔开。

输出

对于每组数据,输出一个整数,表示wuzhengkai能对对方玩家造成的最大伤害。

样例输入

3
1 1 D W
8 8
4 2 D
样例输出

5

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>using namespace std;
struct ser
{int att,hp;bool w,d;
}a[10];
int ans,n,num[10];
void dfs(int res,int hurt,int step,bool fir)
{if(step==n){if(res>=8) ans=max(ans,hurt);return;}int i=num[step];if(fir){fir=false;if(a[i].w){if(a[i].d||a[i].hp>8){dfs(res,hurt+a[i].att,step+1,fir);dfs(res+a[i].att,hurt,step+1,fir);}}dfs(res,hurt,step+1,fir);}else{if(a[i].w){dfs(res,hurt+a[i].att*2,step+1,fir);if(a[i].d||a[i].hp>8){dfs(res+a[i].att,hurt+a[i].att,step+1,fir);dfs(res+a[i].att*2,hurt,step+1,fir);}}dfs(res+a[i].att,hurt,step+1,fir);dfs(res,hurt+a[i].att,step+1,fir);}
}
int main()
{char c;while(scanf("%d",&n)!=EOF){ans=0;for(int i=0;i<n;i++){scanf("%d%d",&a[i].att,&a[i].hp);a[i].w=a[i].d=false;while(scanf("%c",&c)!=EOF){if(c=='\n') break;if(c=='W')a[i].w=true;else  if(c=='D')a[i].d=true;}}for(int i=0;i<n;i++)num[i]=i;for(int i=0;i<n;i++){swap(num[i],num[0]);dfs(0,0,0,true);}printf("%d\n",ans);}return 0;
}

这一题是多组测试样例,WA了半天才知道,然后这一题有几个我个人想多了的地方。

首先一个随从攻击一次之后,只要他能攻击第二次,他就能满足条件的情况下攻击玩家,并且他的攻击时间不必紧跟,可以在之后的任何时间攻击。

对此,每次对单个随从的攻击做出一些假设,只要最终 诺兹多姆遭受超过8的攻击就可以了,选取最终的最大值。

hihocoder 诺兹多姆相关推荐

  1. hihocoder #1115 : 诺兹多姆(dfs爆搜)

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 wuzhengkai是一个炉石传说玩家. 有一天,他碰到对面上了个诺兹多姆并上了嘲讽和圣盾. 诺兹多姆是一个有8点攻击力和8 ...

  2. hihoCoder 网络流四·最小路径覆盖

    题面带解释 hihoCoder感觉很好. 网络流的精华就是建图 #include<cstdio> #include<iostream> #include<algorith ...

  3. hihoCoder #1142 : 三分求极值

    #1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...

  4. hihocoder 后缀自动机专题

    一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...

  5. hihoCoder 1051 补提交卡(贪心,枚举)

    #1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...

  6. hihoCoder week3 KMP算法

    题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...

  7. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  8. hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)...

    #1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...

  9. hihoCoder太阁最新面经算法竞赛18

    比赛链接:http://hihocoder.com/contest/hihointerview27/problems A.Big Plus 模拟水 1 #include <bits/stdc++ ...

最新文章

  1. 概率论中均值、方差、标准差介绍及C++/OpenCV/Eigen的三种实现
  2. 最近开发老遇到莫名其妙的问题,dialog自定义大小,setAttributes这个方法没反应是肿么一回事...
  3. 在Windows应用程序中使用正则表达式
  4. 详解js中typeof、instanceof与constructor
  5. C++ MD5类源文件
  6. 第13章:项目合同管理(1)-章节重点
  7. css表单发光,表单input选中后发光CSS怎么写
  8. 【Qt】创建线程程序示例
  9. 像烟灰一样松散(毕淑敏)
  10. Unity3D Shader入门指南(二)
  11. Redis面试 - redis 的并发竞争问题是什么?
  12. 修改MySQL自动递增值
  13. TextView常用属性
  14. 一杯茶的时间,上手 Django 框架开发
  15. IIS无法启动,提示另外一个程序正在使用此文件
  16. 理解ARC在Objective-C中的应用
  17. Jetson Xavier NX学习笔记(三)系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版)
  18. xv6 6.S081 Lab5: cow
  19. windows server 2008R2服务端上安装流媒体服务器
  20. 想必这篇秋招面试贴会帮助你

热门文章

  1. android webview 自适应屏幕宽度,Android webview加载html自适应屏幕
  2. Python float函数
  3. C# WinForm中四种显示信息的方式
  4. java彩虹雨_Java字符串分割
  5. vscode自动补全函数跳转
  6. 于集鑫:5月3日BTC/ETH/LTC早间行情分析
  7. A (Zero-Knowledge) Vector Commitment with Sum Binding and its Applications学习笔记
  8. C#实现图片叠加,图片上嵌入文字,文字生成图片的方法
  9. 把csdn博客打包成md文件的办法,便于迁移到其他博客平台或者自己的博客上,一分钟搞定
  10. 我骑方轮车笑对坑洼人生