今日学习记录
1. C-nico 和 niconiconi_牛客 2025 秋季算法编程训练联赛 1-提升组
关键词:动态规划
问题分析
就是给出一些价值不同的字符串,然后题目给一个大字符串,在这个大的字符串中,替换不同的字符串然后得到不同的价值,求最大的价值
核心思路
没啥东西,直接暴力就行,记录每个位置上的替换不同字符串的最大值就行
**最终代码:
#include <bits/stdc++.h>
using namespace std;
#define ve vector
using ll = long long;
using ull = unsigned long long;
using sr = string;
using db = double;
int n,a,b,c;
sr str;
void solve(){
cin>>n>>a>>b>>c>>str;
ve<ll> dp(n);
for(int i = 1;i<=n;i++){
dp[i] = dp[i-1];
if(i>=4&&str.substr(i-4,4)=="nico") dp[i] = max(dp[i],dp[i-4]+a);
if(i>=6&&str.substr(i-6,6)=="niconi") dp[i] = max(dp[i],dp[i-6]+b);
if(i>=10&&str.substr(i-10,10)=="niconiconi") dp[i] = max(dp[i],dp[i-10]+c);
}
cout<<dp[n];
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}学到的点:
- 犯二了