我是如何想到用最简单易懂的解法的

nico和niconiconi

http://www.nowcoder.com/questionTerminal/70a03345bae6499ea4338ebc3a0b60e9

我是如何想到用最简单易懂的解法的

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
ll a,b,c;//范围是1e9,但相加就要超,所以用ll 
ll f[300010]={0};
char s[300010];
int main(){
    scanf("%d%lld%lld%lld",&n,&a,&b,&c);
    scanf("%s",s);
    //贪心,每一个位置的最大分数 
    for(int i=1;i<=n;i++){
        f[i]=max(f[i],f[i-1]);
        if(s[i-1]=='n' && s[i]=='i' && s[i+1]=='c' && s[i+2]=='o'){
            f[i+3]=max(f[i+3],f[i-1]+a);
            if(s[i+3]=='n' && s[i+4]=='i'){
                f[i+5]=max(f[i+5],f[i-1]+b);
                if(s[i+5]=='c' && s[i+6]=='o' && s[i+7]=='n' && s[i+8]=='i')
                    f[i+9]=max(f[i+9],f[i-1]+c);
            }
        }
    }
    printf("%lld",f[n]);
    return 0;
}
全部评论

相关推荐

01-30 10:21
中北大学 golang
27届学院本誓死冲击...:技术栈不用搞这么详细,主要还是看实习和项目,毕竟技术栈就那点,你能写这么多,别人也可以写这么多,模版换一下换成上下的,不知道怎么排版可以去看看别人怎么写
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
10
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务