首页 > 代码库 > LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿
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」接竹竿
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。