HDOJ 1003 最大子串行和

2021-10-23 22:32:57 字數 985 閱讀 7964

最開始題目都沒看懂,看了別人的部落格才知道這道題是要求最大子串行和。

這裡我先歸納了三種求解最大子串行和問題的演算法,在最後給出該題的ac**。

直接遍歷所有可能的情況。

int maxsubsequence1(int arr, int n)

} return max_sum;

}

若將乙個序列從中分為兩半的話,該序列的和最大的子串行的位置不外乎三種情況——左邊的序列中、右邊的序列中、橫跨兩個序列,所以這裡可使用分治法來解決。

int maxsubsequence2(int arr, int left, int right)

int maxrightbordersum = 0, rightbordersum = 0;

for (int i = mid + 1; i <= right; ++i)

// 從三者中選出最大子串行的和

return max3(maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum);

}int max3(int a, int b, int c)

int maxsubsequence3(int arr, int n)

return max_sum;

}

#include using namespace std;

int main()

if (sum < 0)

} // 5 1 -1 4 -5 3

printf("case %d:\n", j + 1);

printf("%d %d %d\n", max_sum, start, end);

if (j < n_case - 1)

printf("\n"); }

return 0;

}

HDOJ1003 求最大子列

思路 既然要求乙個數列中最大子列的值。第一種思路 暴力,直接遍歷這個數列,但最大的數列元素個數有10000個,所以肯定超時 所以想到第二種方法 只需要遍歷一遍這個數列。從第乙個數字一直往後加,求和,如果和乙隻在增大,那麼不斷更新最大值和 上限 題目輸出要求中的第三個數字 如果碰到所求和比最大值小了那...

動態規劃 最大子串 HDOJ1003

題目大意 輸入是具有n個整數的向量x,輸出是輸入向量的任何聯絡子向量中的最大和,並輸出該子向量的開始和結束為止。例如 輸入 5 6 1 5 4 7 7 0 6 1 1 6 7 5 輸出 case 1 14 1 4 case 2 7 1 6 分別有四種方法都能夠求解出來分別是o n 3 和o n 2 ...

最大子串行和 HDOJ 1003 Max Sum

題目傳送門 題意 求mcs 最大連續子串行和 及兩個端點 分析 第一種辦法 dp i max dp i 1 a i a i 可以不開陣列,用乙個sum表示前i個數字的mcs,其實是一樣的。類似dp的做法有個名字叫聯機演算法。第二種辦法 乙個字首記錄前i個數字的和,那麼ans sum mn mn表示前...