abc D求调/Hack
  • 板块学术版
  • 楼主ant2010
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/23 20:55
  • 上次更新2024/3/23 20:57:52
查看原帖
abc D求调/Hack
739429
ant2010楼主2024/3/23 20:55

我的做法是dp,应该不用解释了吧。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int const maxn=2e5+5;
ll dp[maxn][2][2];
int c[maxn];
char s[maxn];
int main(){
    int n;
    scanf("%d%s",&n,s+1);
    for(int i=1;i<=n;i++)scanf("%d",c+i);
    dp[0][0][1]=dp[0][1][1]=1e18;
    for(int i=1;i<=n;i++){
        int k=s[i]-'0';
        dp[i][k][0]=dp[i-1][k^1][0];
        dp[i][k^1][0]=dp[i-1][k][0]+c[i];
        dp[i][k][1]=min(dp[i-1][k][0],dp[i-1][k^1][1]);
        dp[i][k^1][1]=min(dp[i-1][k^1][0],dp[i-1][k][1])+c[i];
    }
    printf("%lld",min(dp[n][0][1],dp[n][1][1]));
}
2024/3/23 20:55
加载中...