题目链接:戳这里

题意:从(1,1)出发,一遍把格子走完,每个格子只能走一次。问怎么走总和最大。

解题思路:画图可知,总共就3种走法的混合。

dw: 样例1的走法

up: 样例1反过来的走法

lp: 样例2的走法

两种组合情况:

先lp,后dw或up

我的思路是暴力预处理。把dw,up,lp三种走法先预处理出来,然后再看两种组合情况的拐点在哪,遍历拐点求出最大的值即可。虽然代码很长,但大多数都是重复代码,思路还是很简单的。

附ac代码:

 1 #include <cstdio>
2 #include <cstring>
3 #include <string>
4 #include <algorithm>
5 #include <cmath>
6 #include <vector>
7 #include <queue>
8 #include <iostream>
9 using namespace std;
10 typedef long long ll;
11 const int maxn = 1e6 + 10;
12 ll nu[3][maxn];
13 ll dw[3][maxn];
14 ll up[3][maxn];
15 ll lp[3][maxn];
16 ll sumup[3][maxn];//单纯的前缀和,用于处理混合情况时up里的时间
17 ll sumdw[3][maxn];//如上
18 int dx[6] = {1, 0,-1, 0};
19 int dy[6] = {0, 1, 0, 1};
20 int main(){
21 int n;
22 scanf("%d", &n);
23 for(int i = 1; i <= 2; ++i)
24 {
25 for(int j = 1; j <= n; ++j)
26 {
27 scanf("%lld", &nu[i][j]);
28 }
29 }
30 for(int i = 1; i <= n; ++i)
31 {
32 up[2][i] += nu[2][i] * i + up[2][i - 1];
33 sumup[2][i] += nu[2][i] + sumup[2][i - 1];
34 }
35 up[1][n] += up[2][n];
36 sumup[1][n] += sumup[2][n];
37 for(int i = n ; i >= 2; --i)
38 {
39 up[1][i] += nu[1][i] * (2 * n - i + 1) + up[1][i + 1];
40 sumup[1][i] += nu[1][i] + sumup[1][i + 1];
41 }
42 for(int i = 2; i <= n; ++i)
43 {
44 dw[1][i] += nu[1][i] * (i - 1) + dw[1][i - 1];
45 sumdw[1][i] += nu[1][i] + sumdw[1][i - 1];
46 }
47 dw[2][n] += dw[1][n];
48 sumdw[2][n] += sumdw[1][n];
49 for(int i = n; i >= 1; --i)
50 {
51 dw[2][i] += nu[2][i] * (2 * n - i) + dw[2][i + 1];
52 sumdw[2][i] += nu[2][i] + sumdw[2][i + 1];
53 }
54 int u = 1, v = 1;
55 int cnt = 0;
56 while(u <= 2 && v <= n)
57 {
58 for(int i = 0; i < 4; ++i)
59 {
60 ++cnt;
61 u += dx[i];
62 v += dy[i];
63 if(u > 2 || v > n) break;
64 lp[u][v] = lp[u - dx[i]][v - dy[i]] + nu[u][v] * cnt;
65 }
66 }
67 ll ans = 0;
68 for(int i = 1; i <= n; i += 2)
69 {
70 ans = max(ans, lp[1][i] + (i / 2 * 2) * (sumdw[2][i] - sumdw[1][i]) + dw[2][i] - dw[1][i]);//临界值不清楚的同学自己画图跑跑就知道啦
71 }
72 for(int i = 2; i <= n; i +=2)
73 {
74 ans = max(ans, lp[2][i] + (i - 2) * (sumup[1][i] - sumup[2][i]) + up[1][i] - up[2][i]);
75 }
76 printf("%lld\n", ans);
77 return 0;
78 }

codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】的更多相关文章

  1. CodeForces - 1016C Vasya And The Mushrooms

    题面在这里! 好久没有体会这种A题的快感了23333 一开始看错了,以为权值是从1开始的,不过这样不要紧,最后把算的答案减去两行数的和就是正确的答案了. 然后发现位于一个角上的时候,我们其实只有两种选 ...

  2. codeforces C. Vasya And The Mushrooms (思维+模拟)

    题意:给定一个2*n的矩形方格,每个格子有一个权值,从(0,0)开始出发,要求遍历完整个网格(不能重复走一个格子),求最大权值和,(权值和是按照step*w累加,step步数从0开始). 转载: 题解 ...

  3. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  4. CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26

    /* CodeForces - 837E - Vasya's Function [ 数论 ] | Educational Codeforces Round 26 题意: f(a, 0) = 0; f( ...

  5. Vasya And The Mushrooms CodeForces - 1016C (前缀和模拟)

    大意: 给定2*n的矩阵, 每个格子有权值, 走到一个格子的贡献为之前走的步数*权值, 每个格子只能走一次, 求走完所有格子最大贡献. 沙茶模拟打了一个小时总算打出来了 #include <io ...

  6. Educational Codeforces Round 48 (Rated for Div. 2) D 1016D Vasya And The Matrix (构造)

    D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  7. codeforces1016 D. Vasya And The Matrix(思维+神奇构造)

    D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  8. Codeforces 755E:PolandBall and White-Red graph(构造+思维)

    http://codeforces.com/contest/755/problem/E 题意:给出n个点和一个距离d,让你在这个n个点的图里面构造一个子图,使得这个子图的直径和补图的直径的较小值为d, ...

  9. codeforces 454 E. Little Pony and Summer Sun Celebration(构造+思维)

    题目链接:http://codeforces.com/contest/454/problem/E 题意:给出n个点和m条边,要求每一个点要走指定的奇数次或者是偶数次. 构造出一种走法. 题解:可能一开 ...

随机推荐

  1. 使用jib-maven-plugin将Spring Boot项目发布为Docker镜像

    目录 介绍 使用 总结 介绍 将spring boot(cloud)项目发布到docker环境作为镜像,一般常用的一个是com.spotify的docker-maven-plugin这个maven插件 ...

  2. 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS

    实现简易版德州扑克 1.先上达到网页效果图(简易版德州扑克) 网页分为发牌区和牌池,上面为发牌区,下面是牌池区 2. 代码实现 2.1 HTML和JS代码 ` <link rel="s ...

  3. [Usaco2006 Nov]Corn Fields牧场的安排

    题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...

  4. IOC技术在前端项目中的应用

    目录 背景 什么是IOC 如何实现一个IOC 第一步:实现一个容器 第二步:用好装饰器 第三步:使用容器 扩展和展望 最后 背景 前端发展至今已经过去30余年,前端应用领域在不断壮大的过程中,也变得越 ...

  5. Ice系列--基于IceGrid的部署方案

    前言 前一篇文章介绍了IceGrid的简单应用.这篇文章来介绍一下它的高端玩法-如何将模板,复制组,知名对象应用于部署方案及其作用. 基于模板的部署方案 之前介绍了xml格式的配置文件通过各种描述符如 ...

  6. 性能测试WAS内存使用的探索和分析

    性能测试中,CPU和内存是关注最多的两个性能指标.以我行应用最多的系统架构(WAS+Oracle)来说,CPU使用率高的问题多发生于数据库,比如索引不当引发的表扫描.绑定变量使用不当引发的硬解析.连接 ...

  7. python 使用函数名的字符串调用函数(4种方法)_black-heart的专栏-CSDN博客 https://blog.csdn.net/mrqingyu/article/details/84403924

    funcs = ['fetch_data_' + i for i in ( 'activities', 'banners', 'server_list')]# from operator import ...

  8. Service Mesh 在百度网盘数万后端的落地实践

    https://www.infoq.cn/article/vpa6aypkizuqiijzflih

  9. ByteDance 2019 春招题目

    牛客网字节跳动笔试真题:https://www.nowcoder.com/test/16516564/summary 分了 2 次做,磕磕碰碰才写完,弱鸡悲鸣. 1. 聪明的编辑 题目:Link . ...

  10. CF976B

    这是一道考验思维找规律的题,很有可做性. 正文 题意 一个 n * m 的矩阵,从左上角(1 , 1) 开始,先向下走直到最下方,再向右走到最右,再向上走一个,再走到最左......一直走到(1 , ...