【状态机】atcoder 346 D

2024-03-24 16:04
文章标签 状态机 atcoder 346

本文主要是介绍【状态机】atcoder 346 D,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给一个长度为n的01字符串s,可以进行操作:

将0变成1,1变成0,操作的成本为 ci ;

求将s变成好字符串的最小成本。

好字符串:s[i] 和 s[i+1] 只有一对相同。

#include<iostream>
#include<set>
using namespace std;
typedef long long LL;
const int N=2e5+10;
LL c[N];
LL ldp[2][N];//ldp[k][i]:表示从1~i,相邻两位不同且第i个字符为k的最小价值
LL rdp[2][N];//rdp[k][i]:表示从i~n,相邻两位不同且第i个字符为k的最小价值
int main(){int n;cin>>n;string s;cin>>s;s=' '+s;for(int i=1;i<=n;i++) cin>>c[i];for(int i=1;i<=n;i++){if(s[i]=='0'){ldp[0][i]=ldp[1][i-1];ldp[1][i]=ldp[0][i-1]+c[i];}else{ldp[0][i]=ldp[1][i-1]+c[i];ldp[1][i]=ldp[0][i-1];}}for(int i=n;i>=1;i--){if(s[i]=='0'){rdp[0][i]=rdp[1][i+1];rdp[1][i]=rdp[0][i+1]+c[i];}else{rdp[0][i]=rdp[1][i+1]+c[i];rdp[1][i]=rdp[0][i+1];}}LL minv=1e20;for(int i=1;i<n;i++){//让第i个和第i+1个字符相同minv=min(minv,ldp[0][i]+rdp[0][i+1]);minv=min(minv,ldp[1][i]+rdp[1][i+1]);}cout<<minv<<endl;return 0;
}

这篇关于【状态机】atcoder 346 D的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842079

相关文章

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

STM32F4按键状态机--单击、双击、长按

STM32F4按键状态机--单击、双击、长按 一、状态机的三要素二、使用状态机原因2.1资源占用方面2.2 执行效率方面:2.3 按键抖动方面: 三、状态机实现3.1 状态机分析3.1 程序实现 百度解析的状态机概念如下 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(

Spring 状态机

文章目录 使用 Spring 状态机构建订单处理系统什么是 Spring 状态机?示例场景:订单处理系统步骤 1: 添加依赖步骤 2: 定义状态和事件步骤 3: 配置状态机步骤 4: 使用状态机步骤 5: 测试状态机Spring 状态机原理详细说明核心概念实现机制 使用 Spring 状态机构建订单处理系统 在构建复杂的业务流程时,状态机是一种强大的工具。它帮助我们定义状态、

【C++ 前缀和 状态机dp】2826. 将三个组排序

本文涉及的基础知识点 C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 C++动态规划 LeetCode2826. 将三个组排序 给你一个整数数组 nums 。nums 的每个元素是 1,2 或 3。在每次操作中,你可以删除 nums 中的一个元素。返回使 nums 成为 非递减 顺序所需操作数的 最小值。 示例 1: 输入:nums = [2,1,3,2,1] 输

C++ 有限元状态机

测试  #include <iostream>#include "state_machine.h"class Context {public:char input;};class TurnOn : public sm::Event<Context> {public:bool triggered() {if(context->input=='1') {std::cout << "switc

Unity教程(十三)敌人状态机

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程(四)碰撞检测 Unity教程(五)角色冲刺的实现 Unity教程(六)角色滑墙的实现 Unity教程(七)角色蹬墙跳的实现 Unity教程(八)角色攻击的基本实现 Unity教程

PCIe物理层LTSSM状态机解析

目录 1、Detect 2、Polling 3、Configuration 4、L0 5、Recovery 6、L0s/L1/L2 7、Hot Reset 8、Disabled 9、Loopback 在PCIe链路可以正常工作之前,需要对PCIe链路进行链路训练,在这个过程中,就会用LTSSM状态机。LTSSM全称是Link Training and Status St

题解AtCoder ABC 358 F Easiest Maze

一道模拟题。 思路 最短的路线是直接竖着走下来,经过 n n n 个格子,所以 k k k 最小是 n n n。如果想要延长路线,可以采用九转大肠的形状,就像这样: 可以发现,每次向左走之后都必须走回来,所以每次新经过的格子数是偶数,得到 k − n k-n k−n 是偶数才有可行的方案。 首先,把整张图表的初始状态设为如下形式(即每个格点都是独立的): +++++S++o|o|o

AtCoder Beginner Contest 369 ABCDE

背景 无 A题:369  思路 假设A<=B 分类讨论,有如下两种情况         1.A==B,情况唯一,另外一个数只能取A         2.A<B,首先我们可以以B-A为公差d构造,另外一个数可以取A-d或者B+d。(然后接着考虑放在A和B中间的情况,样例中给了,只要B-A为偶数即可) 代码 inline void solve() {int a, b; cin >>