2020年算法设计竞赛 DP

链接:https://ac.nowcoder.com/acm/contest/3002/I
来源:牛客网
https://ac.nowcoder.com/acm/contest/3002/I

题目描述

"にっこにっこにー"     ——nico
nico平时最喜欢说的口头禅是niconiconi~。
有一天nico在逛著名弹幕网站"niconico"的时候惊异的发现,n站上居然有很多她的鬼畜视频。其中有一个名为《让nico为你洗脑》的视频吸引了她的注意。
她点进去一看,就被洗脑了:"niconicoh0niconico*^vvniconicoG(vniconiconiconiconiconicoG(vniconico......"
弹幕中刚开始有很多“nico*1 nico*2”等计数菌,但到后面基本上都是“计数菌阵亡”的弹幕了。
nico也想当一回计数菌。她认为:"nico" 计 分,"niconi" 计 分,"niconiconi" 计 分。
她拿到了一个长度为 的字符串,请帮她算出最大计数分数。
注:已被计数过的字符不能重复计数!如"niconico"要么当作"nico"+"nico"计 分,要么当作"niconi"+"co"计 分。
 
 
 
 
 
 
 

输入描述:

第一行四个正整数 

第二行是一个长度为
 的字符串。
 

输出描述:

一个整数,代表最大的计数分数。
 
示例1

输入

复制
19 1 2 5
niconiconiconiconi~

输出

7

说明

"niconi"co"niconiconi"~
故为2+5=7分

 

 


 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 }

 

posted @ 2020-02-04 21:05  古比  阅读(290)  评论(0编辑  收藏  举报