nico和niconiconi

nico和niconiconi

https://ac.nowcoder.com/acm/contest/3002/I

nico和niconiconi
https://ac.nowcoder.com/acm/contest/3002/I
图片说明

本次使用动规dp
(每一步对于之前都是最优,可以从局部入手)
开个数组dp存储“成本”

#pragma warning (disable :4996)
#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll modd = 1e9 + 7;
const int INF = 0xffffff;

ll dp[300010];
string S;
int main()
{
    int n, a, b, c;
    scanf("%d %d %d %d", &n, &a, &b, &c);
    getchar();
    cin >> S;
    for (int i = 0; i < n; i++) {
        if (i > 0)
            dp[i] = dp[i - 1];
        if (i >= 3) {
            if (S.substr(i - 3, 4) == "nico")
                dp[i] = max(dp[i], dp[i - 3] + a);
        }
        if (i >= 5) {
            if (S.substr(i - 5, 6) == "niconi")
                dp[i] = max(dp[i], dp[i - 5] + b);
        }
        if (i >= 9) {
            if (S.substr(i - 9, 10) == "niconiconi")
                dp[i] = max(dp[i], dp[i - 9]+c);
        }
    }
    cout << dp[n - 1] << endl;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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