2020年算法设计竞赛 DP
链接:https://ac.nowcoder.com/acm/contest/3002/I
来源:牛客网
https://ac.nowcoder.com/acm/contest/3002/I
题目描述
"にっこにっこにー" ——niconico平时最喜欢说的口头禅是niconiconi~。
有一天nico在逛著名弹幕网站"niconico"的时候惊异的发现,n站上居然有很多她的鬼畜视频。其中有一个名为《让nico为你洗脑》的视频吸引了她的注意。
她点进去一看,就被洗脑了:"niconicoh0niconico*^vvniconicoG(vniconiconiconiconiconicoG(vniconico......"
弹幕中刚开始有很多“nico*1 nico*2”等计数菌,但到后面基本上都是“计数菌阵亡”的弹幕了。
nico也想当一回计数菌。她认为:"nico" 计
她拿到了一个长度为
注:已被计数过的字符不能重复计数!如"niconico"要么当作"nico"+"nico"计
输入描述:
第一行四个正整数
。
第二行是一个长度为
的字符串。
输出描述:
一个整数,代表最大的计数分数。
示例1
输出
7
说明
"niconi"co"niconiconi"~
故为2+5=7分
![](https://img2018.cnblogs.com/i-beta/1797462/202002/1797462-20200204210500900-310469598.png)
1 #include <bits/stdc++.h> 2 using namespace std ; 3 typedef long long LL ; 4 LL dp[300005]; 5 int main() 6 { 7 int n,a,b,c; 8 cin>>n>>a>>b>>c; 9 string s,t; 10 s.push_back(1); 11 cin>>t; 12 s+=t; 13 string s1="nico"; 14 string s2="niconi"; 15 string s3="niconiconi"; 16 s[n+1]='\0'; 17 for(int i=1;i<=n;++i){ 18 dp[i]=dp[i-1]; 19 if(i>=4&&s.substr(i-3,4)==s1) 20 dp[i]=max(dp[i],dp[i-4]+a); 21 if(i>=6&&s.substr(i-5,6)==s2) 22 dp[i]=max(dp[i],dp[i-6]+b); 23 if(i>=10&&s.substr(i-9,10)==s3) 24 dp[i]=max(dp[i],dp[i-10]+c); 25 } 26 cout<<dp[n]<<endl; 27 return 0; 28 }