求環中的最長連續子串行的和

2021-08-05 18:51:53 字數 1105 閱讀 2811

1282: ykc想吃好吃的

這裡寫鏈結內容

題目描述

一天,ykc在學校閒的無聊,於是決定上街買點吃的,ykc很懶,本來就不是很像逛街,於是找來了czl幫他買,這裡應該有滑稽,而czl也不願為ykc買東西吃,但是ykc很強勢,非讓他去買,呢沒辦法了,然而czl還有很多事要做,沒呢麼多時間幫ykc,而這條小吃街又很長,有n家店,n有50000這麼大,並且這n家店的商品價值有所不同(要知道,商品的價值可能為負,哈哈,很神奇吧,但是czl肯定不會傻到賠錢,所以***),哇,czl要瘋了,他不想逛這麼久啊,他還有個毛病,他只會連續的逛若干家店,並且由於這條街的店很多,所以肯定不會是一條直線,換句話說就是首尾相連,即第n家店和第一家店是連在一起的,然而ykc希望czl買的東西價值最大,不然就會不開心,於是他就把艱難的任務交給你了,他真的不想浪費時間,你能幫助他嗎?

輸入第1行:小吃街的長度n(2 <= n <= 50000)

第2 - n+1行:n個整數,代表每個店的商品價值 (-10^9 <= s[i] <= 10^9)

輸出czl能買到的最大價值

樣例輸入

6 -2 11 -4 13 5 -2

樣例輸出

思路:1. 可以求出最大連續子串行的和and最小連續子串行的和,然後最後max(總和-最小連續和, 最大連續和),2. 也可以取陣列的相反數求兩個最大連續子串行的和。

#include 

#include

#include

using

namespace

std;

const

int inf = 0x3f3f3f3f;

const

int maxn =100005;

typedef

long

long ll;

ll a[maxn];

int main()

ll ans=0, max=-inf;

ll min=inf, ans1=0;

for(int i=1; i<=n; ++i)

printf("%lld\n",max(sum-min, max));

}return

0;}

求最長連續公共子串行和最長連續子字串

問題的關鍵是如何定義子問題。假設有 xm x1 x2 x3 xm yn y1 y2 y3 yn 1.最長公共子串行 不必連續 定義f m,n 為xm和yn之間最長的子串行的長度 於是有f m,0 f 0,m 0 如果xm yn,則f m,n max 如果xm yn,則f m,n f m 1,n 1 ...

最長連續子串行和

動態規劃 一維dp i 表示以i結尾的子陣列的最大和 以下 可以記錄子陣列的開始和結束位置 要求輸出子串行和的第乙個和最後乙個 include include 兩個輔助陣列 const int maxn 1000 int dp maxn int pre maxn 存放子串行的開始 int arr m...

最長公共連續子串和最長連續公共子串行

用二維陣列c i j 記錄串x1 x2 x i x1x2 xi與y 1y 2 y j y1y2 yj 的lcs長度,則可得到狀態轉移方程c i,j 0c i 1 j 1 1max c i,j 1 c i 1,j i 0 orj 0i,j 0a ndxi y j i,j 0a ndxi y j pub...