害。这题一开始我就没想到要咋做。原本想的是要暴力模拟。(蒟蒻流泪
但是根本无从下手呀。看了题解才发现是一个炒鸡炒鸡简单的DP题。暴力跑一边就好了。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=3e5+20; ll dp[maxn]; string str; int main(){ int n,a,b,c; cin>>n>>a>>b>>c; cin>>str; for(int i=1;i<n;i++){ dp[i]=max(dp[i],dp[i-1]); if(i>=3&&str.substr(i-3,4)=="nico") dp[i]=max(dp[i],dp[i-3]+(ll)a); if(i>=5&&str.substr(i-5,6)=="niconi") dp[i]=max(dp[i],dp[i-5]+(ll)b); if(i>=9&&str.substr(i-9,10)=="niconiconi") dp[i]=max(dp[i],dp[i-9]+(ll)c); } printf("%lld\n",dp[n-1]); return 0; }