LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿
Posted ZlycerQan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿相关的知识,希望对你有一定的参考价值。
二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿
/* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱就好了 再随便用前缀和优化一下 O(N) */ #include <iostream> #include <cstdio> const int BUF = 100000010; char Buf[BUF], *buf = Buf; inline long long max (long long a, long long b) { return a > b ? a : b; } void read (int &now) { for (now = 0; !isdigit (*buf); ++ buf); for (; isdigit (*buf); now = now * 10 + *buf - ‘0‘, ++ buf); } #define Max 1000020 int N, K; long long sum[Max]; int to[Max]; int last_kind[Max * 100]; long long dp[Max]; int main (int argc, char *argv[]) { fread (buf, 1, BUF, stdin); read (N); read (K); register int i; int x; for (i = 1; i <= N; ++ i) { read (x); to[i] = last_kind[x]; last_kind[x] = i; } for (i = 1; i <= N; ++ i) { read (x); sum[i] = sum[i - 1] + x; } register int res; for (i = 1; i <= N; ++ i) { dp[i] = dp[i - 1]; if (to[i]) dp[i] = max (dp[i], max (dp[to[i]] + sum[i] - sum[to[i]], dp[to[i] - 1] + sum[i] - sum[to[i] - 1])); } printf ("%lld", dp[N]); return 0; }
以上是关于LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿的主要内容,如果未能解决你的问题,请参考以下文章
LibreOJ「LibreOJ β Round #4」 游戏
LibreOJ #526. 「LibreOJ β Round #4」子集
LibreOJ #525. 「LibreOJ β Round #4」多项式
LibreOJ #528. 「LibreOJ β Round #4」求和