首页 > 试题广场 >

nico和niconiconi

[编程题]nico和niconiconi
  • 热度指数:1437 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串 S ,定义三种有价值的字符串: A = "nico" ,B = "niconi" , C = "niconiconi"
其中,字符串 A 的价值为 a, 字符串 B 的价值为 b字符串 C 的价值为 c
她拿到了一个长度为 n 的字符串,你需要在其中找到一些有价值的子串 (指字符串中连续的一段)并统计价值之和的最大值。
注:已被计算价值过的字符不能重复计算价值!如 "niconico" 要么当作 "nico" + "nico" 计 2a 分,要么当作 "niconi" + "co" 计 b 分(其中 "co" 不计分)。



输入描述:
第一行四个正整数 
第二行是一个长度为 的字符串。


输出描述:
一个整数,代表最大的计数分数。
示例1

输入

19 1 2 5
niconiconiconiconi~

输出

7

说明

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

输入

6 1 2 5
nocole

输出

0

备注:

n,a,b,c=list(map(int,input().split()))
s=input()
str_a='nico'
str_b='niconi'
str_c='niconiconi'
dp=[0 for i in range(n)]
for i in range(3,n):
    dp[i]=dp[i-1]
    if s[i-3:i+1]==str_a:
        dp[i]=max(dp[i],dp[i-4]+a)
    if s[i-5:i+1]==str_b and i>4:
        dp[i]=max(dp[i],dp[i-6]+b)
    if s[i-9:i+1]==str_c and i>8:
        dp[i]=max(dp[i],dp[i-10]+c)
print(dp[n-1])

发表于 2021-10-26 23:47:27 回复(0)
def niconiconi():
    s=input()
    l=s.split(' ')
    n=l[0]
    n=int(n)
    a=l[1]
    a=int(a)
    b=l[2]
    b=int(b)
    c=l[3]
    c=int(c)
    stri=input()
    dp=[0]*n
    m=0
    if n<4:
        print(0)
    for i in range(3,n):
        dp[i]=dp[i-1]
        if stri[i-3:i+1]=="nico":
            dp[i]=max(dp[i-1],int(dp[i-3])+a)
        if i>4 and stri[i-5:i+1]=="niconi":
            dp[i]=max(dp[i-1],dp[i-5]+b)
        if i>8 and stri[i-9:i+1]=="niconiconi":
            dp[i]=max(dp[i-1],dp[i-9]+c)
        m=max(m,dp[i])
    print(m)
niconiconi()
niconiconi~
发表于 2021-10-19 21:00:27 回复(0)