gfoj 704 陣列操作

2021-08-07 05:49:50 字數 1643 閱讀 8869

problem 704: 陣列操作

time limit: 1000 ms memory limit: 262144 kb

problem description

給出n個陣列,每個陣列有li個整數,將陣列編號為1,2,3,…,n,然後給出m個數,每個數均為之前陣列的編號,將這些陣列按照給出的編號順序連線起來,形成新的陣列,比如:給出以下三個陣列[1,6,-2],[3,3],[-5,1],然後給出編號2 3 1 3,則新陣列為[3,3,-5,1,1,6,-2,-5,1],現在請問新陣列的最大連續子串行和是多少。

input

第一行兩個正整數n,m。

接下來n行,每行第乙個數為li,之後li個整數。

最後一行有m個正整數,表示連線陣列順序的編號。

【資料範圍】

對於10%的資料,形成的陣列長度不超過100000

對於100%的資料,1 <= n <= 50,1 <= li <= 5000,1 <= m <= 250000,每個陣列中的數絕對值在1000以內

output

一行乙個數,表示最大連續子串行和。

sample input

3 43 1 6 -2

2 3 3

2 -5 1

2 3 1 3

sample output

9[3,3,-5,1,1,6,-2,-5,1],紅色部分為最大和的連續子串行。

problem source

2017提高組聯賽訓練7.10

如果暴力的話只能拿三十分(親自試驗tle)

所以我們可以預處理處每個陣列的左區間和,最大連續子段和,右區間和,區間和

然後o(n)兩次動態規劃

然後每個區間統計答案即可

注:子段和至少要選取乙個元素,即如果詢問的區間全部都是負數,那麼輸出的答案為最小的那個負數的值

吐槽一下gfoj資料太弱,非負都a了

#include

#include

#include

#define n 60

#define m 250010

#define inf 9000000000000000000

using namespace std;

typedef long long ll;

int a[m],n,m,s;

ll ans,f[m][2],sum[n],sub[n],rma[n],lma[n],num;

int main()

num=0;

for(int j=s;j>=1;j--)

num=0;

for(int j=1;j<=s;j++)

// cout<' '

for(int i=1;i<=m;i++)f[i][0]=max(f[i-1][0]+sum[a[i]],rma[a[i]]);

for(int i=m;i>=1;i--)f[i][1]=max(f[i+1][1]+sum[a[i]],lma[a[i]]);

for(int i=0;i<=m;i++)ans=max(ans,max(sub[a[i]],f[i][0]+f[i+1][1]));

cout<}

陣列及陣列操作

c語言是在組合語言的基礎上就行的抽象,所以在理解c語言程式時,務必要以記憶體為基礎進行理解。關於陣列,只是同種型別資料的記憶體使用方式,除了在與指標連用時的語法比較繁瑣,其他都比較簡單。1 定義 初始化 使用 結合指標使用時,就要把它當做位址了 2 使用的情況 當儲存多個相同型別的資料時,可以使用陣...

ruby 陣列操作

陣列的建立 arr array.new num 建立num個元素的陣列,所有陣列元素為nil arr array.new num,elem 建立num個元素的陣列,所有陣列元素為elem arr array m.n 建立m.n元素為m到n的陣列 包括n m.n不包括n arr array elem1...

Jquery 陣列操作

在jquery中處理json陣列的情況中遍歷用到的比較多,但是用新增移除這些好像不是太多。今天試過json i remove json.remove i 之後都不行,看網頁的dom物件中好像json資料是以陣列的形式出現的,查閱了下相關js中陣列的操作一試果然很爽。記錄下來。1 陣列的建立 var ...