日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】

發(fā)布時(shí)間:2025/7/14 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:戳這里

?

題意:從(1,1)出發(fā),一遍把格子走完,每個(gè)格子只能走一次。問怎么走總和最大。

解題思路:畫圖可知,總共就3種走法的混合。

dw: 樣例1的走法

up: 樣例1反過來的走法

lp: 樣例2的走法

兩種組合情況:

先lp,后dw或up

我的思路是暴力預(yù)處理。把dw,up,lp三種走法先預(yù)處理出來,然后再看兩種組合情況的拐點(diǎn)在哪,遍歷拐點(diǎn)求出最大的值即可。雖然代碼很長,但大多數(shù)都是重復(fù)代碼,思路還是很簡單的。

附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];//單純的前綴和,用于處理混合情況時(shí)up里的時(shí)間 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]);//臨界值不清楚的同學(xué)自己畫圖跑跑就知道啦 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 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/zmin/p/9435392.html

總結(jié)

以上是生活随笔為你收集整理的codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。