NYOJ 題目442字串和之差(動態規劃)

2021-06-28 03:37:51 字數 989 閱讀 5722

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:4 描述

給出乙個數列,選出乙個連續非空子序列,使該序列的絕對值max最大,再選出乙個非空子序列(與第乙個序列的選擇無關),使該序列的絕對值min最小。輸出max與min的差值。

輸入第一行是乙個整數m(m<15)表示測試資料的組數。

每組資料第一行是乙個整數 n(n<1000000),表示這個數列元素的個數,接下來一行是n個整數x(-100輸出

輸出max與min的差值(max-min).每組資料輸出佔一行。

樣例輸入

2

4-1 1 3 2

52 3 -2 4 1

樣例輸出

6

7

**原創

上傳者acm_楊延璽

思路:這個題是讓找的子串行,一是連續,二是絕對值,dp[i]表示的從第一項到第i項的和,這用到的乙個技巧,就是加入了乙個元素0

這樣全部是負的時候 0 - dp[0]就是最大值,全部是正的dp[n - 1] - 0也是最大值,有正有負dp[n - 1] - dp[0]就是最大值,求最小值時,排序完相鄰的倆個的dp值的差應該是最近了,遍歷一下找到最小的就好

ac**

#include#include#include#define inf 0xfffffff

int dp[1000010];

int cmp(const void *a,const void *b)

int main()

qsort(dp,n+1,sizeof(dp[0]),cmp);

max=dp[n]-dp[0];

min=inf;

for(i=0;idp[i+1]-dp[i])

min=dp[i+1]-dp[i];

} printf("%d\n",max-min);

}}

NYOJ 422 字串和之差

題目雖然是中文的,但說的不是很清楚,求的是連續子串行和的絕對值的最大值和最小值,然後求兩個絕對值的差。剛開始還以為是最大連續子串行和的問題,發現不一樣,想了一會樣例,然後看了discuss後才理解了題意 分析 這題考察的是對前n項和的理解,因為要求連續子串行和,某連續子串行和 a,b 其實就是前b項...

NYOJ 422 字串和之差

字串和之差 時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 給出乙個數列,選出乙個連續非空子序列,使該序列的絕對值max最大,再選出乙個非空子序列 與第乙個序列的選擇無關 使該序列的絕對值min最小。輸出max與min的差值。輸入第一行是乙個整數m m 8 表示測試資料的組數...

NYOJ 題目915 字串(字串,水題)

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述shiva得到了兩個只有加號和減號的字串,字串長度相同。shiva一次可以把乙個加號和它相鄰的減號交換。他想知道最少需要多少次操作才能把第乙個字串變換成第二個字串。你現在要去幫助他完成那個這個問題。輸入多組測試資料 每組資料有兩行...