本题感觉是思维题,但是无法对每个时刻的技能释放进行精准判断,而且数据量最大到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;
}