题解 | #伤害最大化#

数组

https://ac.nowcoder.com/acm/contest/93515/A

本题感觉是思维题,但是无法对每个时刻的技能释放进行精准判断,而且数据量最大到18,所以可以用dfs来积累最大伤害,dfs函数变量包含多个,dfs变量的确立要综合考虑题中各个条件,本题中,重要条件有时刻,总伤害,总怒气值,由于技能冷却两个时刻,所以变量要包括上个操作所放技能和上上个操作所放技能,由于技能四会使下一个技能伤害翻倍,因此伤害倍数也要算进去。

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,a,d[N],ans;
void dfs(int u,int sumd,int suma,int i,int j,int q)
{
    if(u==n+1)
    {
        ans=max(ans,sumd);
        return;
    }
    for(int k=1;k<=4;k++)
    {
        if(k==i||k==j)continue;//冷却
        if(k==1)dfs(u+1,sumd+d[u]*q,suma,j,k,1);
        else if(k==2)dfs(u+1,sumd,suma+a,j,k,1);
        else if(k==3)dfs(u+1,sumd+suma*q,suma,j,k,1);
        else dfs(u+1,sumd,suma,j,k,2);
    }
}
int main()
{
    cin>>n>>a;
    for(int i=1;i<=n;i++)cin>>d[i];
    dfs(1,0,0,0,0,1);//时刻,总伤害,总怒气值,上上个操作,上个操作,倍数(针对技能四)
    cout<<ans;
    return 0;
}
全部评论

相关推荐

04-25 18:13
五邑大学 Java
无面如何呢:用心包装一下自己的实习
点赞 评论 收藏
分享
wuwuwuoow:Redisson 写错了,记得 Redis 儿子以后都不会写错。其他没啥问题,海投就行。
点赞 评论 收藏
分享
阿里巴巴各部门年终奖开奖了,有人拿到了220w
真烦好烦真烦:拿命换钱呢,公司给你220万,肯定是因为你对公司的贡献大于220万,想想要多厉害多累才能达到
投递阿里巴巴集团等公司10个岗位 >
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务