1282 ykc想吃好吃的

2021-08-05 19:40:32 字數 1437 閱讀 3233

題目描述

一天,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

樣例輸出

解題思路:子段總和=最大子段和+最小子段和。

我們先定義一下:比方說我們從第i個店開始找,把i和i之前的那個店的位置定義為「缺口」。根據題意一共有兩種情況;

第一種是不經過缺口的,那麼這個環狀子段就和普通的線狀子段是一樣的了。

第二種情況是經過了缺口的,那麼就根據上面的公式,最大子段和=子段總和-最小子段和。因為這時最大子段和經過了缺口,所以最小子段和肯定不經過缺口。我們再開乙個陣列存放原先子段的相反數,用原先求最大子段和的方式可以很容易求出最小子段和。

#include

#include

#include

#include

#include

using namespace std;

long

long n;

long

long a[99999];

long

long b[99999];

int main()

long

long maxx=0;

for(long

long i=0;isum+=a[i];

if(sum>maxx)

maxx=sum;

if(sum

<0)

}//這是第一種情況,

sum=0;

long

long maxx2=0;

for(int i=0;isum+=b[i];

if(maxx2<=sum)

maxx2=sum;

if(sum

<0)

}//第二種情況。

printf("%lld\n",max(maxx,maxx2+ans));

}return

0;}

HAUTOJ 1282 ykc想吃好吃的

hautoj ykc想吃好吃的 題目描述 一天,ykc在學校閒的無聊,於是決定上街買點吃的,ykc很懶,本來就不是很像逛街,於是找來了czl幫他買,這裡應該有滑稽,而czl也不願為ykc買東西吃,但是ykc很強勢,非讓他去買,呢沒辦法了,然而czl還有很多事要做,沒呢麼多時間幫ykc,而這條小吃街又...

回文數猜想(1282)

問題描述 problem description 乙個正整數,如果從左向右讀 稱之為正序數 和從右向左讀 稱之為倒序數 是一樣的,這樣的數就叫回文數。任取乙個正整數,如果不是回文數,將該數與他的倒序數相加,若其和不是回文數,則重複上述步驟,一直到獲得回文數為止。例如 68變成154 68 86 再變...

wikioi 1282 約瑟夫問題

這道題所用到的資料結構應該是名次樹,名次樹可以由線段樹實現也可以由樹狀陣列實現。而對於類似這道題這樣的乙個只需要刪除和查詢操作的名次樹而言,可以用樹狀陣列實現,因為用樹狀陣列實現無論效率還是 複雜度都較線段樹而言更優,雖然演算法較線段樹而言更加巧妙。首先,這個資料結構需要乙個用於查詢第k名是什麼的函...