NYOJ 873 環之最大和

2021-09-30 13:39:45 字數 1389 閱讀 8367

題目意思很簡單  就是讓你從n個數字中選取m個連續的數字使和最大  就是這樣沒錯  因為是環狀的 所以可以從末尾連到最開始 

ps: 如果你覺得寫得一定沒有錯 但還是wa   你可能忽略了 long long 沒錯 恭喜你!!!(還要注意最後 mod   n)

方法一 :  可以用字首和 遍歷一遍得到最大值和邊界問題 

#include #include #include using namespace std;

const int maxn = 3000;

int main()

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

// for (int i = 1; i <= n + m - 1; i ++) cout << endl;

// for(int i = 1; i <= n + m - 1; i ++)

int head , tail;

long long ans = -999999;

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

} if(head > n)head %= n;

if(tail > n)tail %= n;

cout << ans << " " << head << " " << tail << endl;

} }

方法二 是這樣的  可以用尺取法  維護兩個偽指標 和 中間變數來得到最大值  這樣的好處在於 如果陣列特別特別大   字首和無法儲存的時候  而且也比字首和的方法更快

#include using namespace std;

const int maxn = 3000;

int main()

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

int head = 1, tail = m;

long long ans = -999999;

long long temp = 0;

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

temp += arr[i];

ans = temp;

int l = head;

int r = tail;

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

} if(head > n)head %= n;

if(tail > n)tail %= n;

cout << ans << " " << head << " " << tail << endl;

}}

沒錯我把兩種方法對應反了  你以為我是不小心的??  笑話 我怎麼可能沒發現  我就是故意的  就是這麼傲嬌

C語言(28)環之最大和

描述 int型範圍內,將m m 1000 個數圍成乙個圈,給定乙個數n n m 求連續的n個數使得和最大。輸出最大和及始末位置。輸入多組測試資料,每組資料首行是兩個數m,n,表示m個數,求n個連續最大和。輸出輸出三個數 sum,b,e,分別表示最大和,開始位置,結束位置。樣例輸入 5 3 4 2 3...

NYOJ 題目104最大和(動態規劃)

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。例子 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩陣為 9 2 4 ...

nyoj 104 最大和 區間dp

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。例子 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩陣為 9 2 4 ...