Yahoo Programming Contest 2019 D - Ears

D - Ears

思路:

s:起点           t:终点           l:左端点           r:右端点

以上称为关键点

dp[i][j]表示到位置 i 为止,已经经过前 j 个关键点的最小花费

转移方程看代码:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define y1 y11
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define pdd pair<double, double>
#define mem(a, b) memset(a, b, sizeof(a))
#define debug(x) cerr << #x << " = " << x << "\n";
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//head

const int N = 2e5 + 10;
LL dp[N][5];
int a[N];
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++) {
        dp[i][0] = dp[i-1][0] + a[i];
        for (int j = 1; j < 5; j++) {
            dp[i][j] = dp[i-1][j];
            for (int k = 0; k < j; k++) dp[i][j] = min(dp[i][j], dp[i-1][k]);
        }
        dp[i][1] += a[i] == 0 ? 2 : (a[i]%2 != 0);
        dp[i][2] += a[i]%2 != 1;
        dp[i][3] += a[i] == 0 ? 2 : (a[i]%2 != 0);
        dp[i][4] += a[i];
    }
    LL ans = dp[n][0];
    for (int i = 1; i < 5; i++) ans = min(ans, dp[n][i]);
    printf("%lld\n", ans);
    return 0;
}

原文地址:https://www.cnblogs.com/widsom/p/10359968.html

时间: 2024-10-09 18:04:50

Yahoo Programming Contest 2019 D - Ears的相关文章

Atcoder Yahoo Programming Contest 2019 简要题解

A-C 直接放代码吧. A int n,k; int main() { n=read();k=read(); puts(k<=(n+1)/2?"YES":"NO"); return 0; } B int d[N];pair<int,int>s[10]; int main() { for(int i=1,u,v;i<=3;i++){ u=read();v=read(); s[i].first=u;s[i].second=v; d[u]++;d[

Yahoo Programming Contest 2019

A - Anti-Adjacency 签. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 int n, k; 7 while (scanf("%d%d", &n, &k) != EOF) 8 { 9 int remind = (n + 1) / 2; 10 puts(k <= remind ? "YES" : "NO"

Yahoo Programming Contest 2019 自闭记

A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long char getc(){char c=getchar();while ((c<'A'||c>'Z')&&a

Yahoo Programming Contest 2019 F - Pass

F - Pass 思路: dp[i][j] 表示到第 i 个球为止放了 j 个蓝球的方案数 第 i 个球来自的位置的最右边是min(i, n) 转移方程看代码 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define y1 y11 #define fi first #define se secon

Yahoo Programming Contest 2019.E.Odd Subrectangles(思路 线性基)

题目链接 \(Description\) 给定一个\(n\times m\)的\(01\)矩阵.求任意选出\(r\)行.\(c\)列(共\(2^{n+m}\)种方案),使得这\(r\)行\(c\)列的交的位置的\(r\times c\)个数的和为奇数,的方案数有多少. (...我也不知道怎么就表述成这样了,反正挺好理解) \(n,m\leq300\). \(Solution\) 假设已经确定了选择某些行,然后把每一行\(m\)个数看做一个\(m\)位二进制数. 如果这些行异或和为\(0\),那怎

[AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

[AtCoder] NIKKEI Programming Contest 2019 ??本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder. A - Subscribers ??首先始终 \(max = \min(A, B)\) ,\(min\) 的话如果 \(A + B \leq N\) ,那么就是 \(0\) ,否则就是 \(A + B - N\) . int n, a, b; int main() { read(n), read

2020-3-14 acm训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019 解题报告+补题报告

2020-3-15比赛解题报告+2020-3-8—2020-3-15的补题报告 2020-3-15比赛题解 训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019  A建筑(模拟) 耗时:3ms 244KB 建筑 你哥哥在最近的建筑问题突破大会上获得了一个奖项 并获得了千载难逢的重新设计城市中心的机会 他最喜欢的城市奈梅根.由于城市布局中最引人注目的部分是天际线, 你的兄弟已经开始为他想要北方和东方的天际线画一些想法

AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)

题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 ai 快乐值,Aoki 吃下获得 bi 快乐值,两人轮流吃,他们的目标是最大化自己获得的快乐值减去她人获得的快乐值吗,问最后该值是多少. 题解:易知 Takahashi 要最大化答案而 Aoki 要最小化答案,考虑全部食物由 Aoki 吃下,则ans = -(b1 + b2 + .... + bn),

【AtCoder】AISing Programming Contest 2019

本来以为是1199rated的..仔细一看发现是1999,所以就做了一下 这场涨分很轻松啊...为啥又没打 等pkuwc考完我一定打一场atcoder(咕咕咕,咕咕咕,咕咕咕咕咕咕咕~) 但是其实我思维速度上真的有点不行... A - Bulletin Board 输出\((N - W + 1)(N - H + 1)\) #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int