[ABC303D] Shift vs. CapsLock

考虑 DP。

fi,0/1f_{i,0/1} 表示当前打完了第 ii 个字母,且 Capslock 现在处于开启或关闭时的代价最小值。

于是可以进行线性 DP。

#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 5;
long long dp[N][2];

int main()
{
	long long x, y, z;
	scanf("%lld%lld%lld", &x, &y, &z);
	string s;
	cin >> s;
	for (int i = 0; i < N; i++) dp[i][0] = dp[i][1] = 1e15;
	dp[0][0] = 0;
	dp[0][1] = z; 
	for (int i = 1; i <= s.size(); i++)
	{
		char c = s[i - 1];
		if (c == 'a')
		{
			dp[i][0] = min(dp[i - 1][0] + min(x, z + y + z), dp[i - 1][1] + min(z + x, y + z));
			dp[i][1] = min(dp[i - 1][0] + min(x + z, z + y), dp[i - 1][1] + min(y, z + x + z));
		}
		else
		{
			dp[i][0] = min(dp[i - 1][0] + min(y, z + x + z), dp[i - 1][1] + min(x + z, z + y));
			dp[i][1] = min(dp[i - 1][0] + min(y + z, z + x), dp[i - 1][1] + min(x, z + y + z));
		}
	}
	printf("%lld\n", min(dp[s.size()][0], dp[s.size()][1]));
	return 0;
}
posted @   HappyBobb  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示