HDU 1003 Max Sum 動態規劃)

2021-07-04 05:13:06 字數 631 閱讀 1462

題意:給定乙個陣列,求最大和子串行的值以及子串行的起始點和結束點。

思路:dp嘛~~

當sum值大於最大值時,就記下最大值以及這個值對應的左起和右終的下標。

當sum<0時,證明加上當前數整個數值為負,這個負數一定不會是下乙個最大子串行的成員,所以起始點要從當前位置的下一位開始, sum也要從新開始,因為下乙個數一定比它加乙個負數要大。

如果陣列全是負數,那麼就是說sum加上那乙個負數sum就小於0了。因此每個負數都是乙個連續子串行。就看哪個負數最大了。因為每次只要sum<0就會將sum重新清0,所以負數情況完全和正數一起處理了。

#include 

#include

#include

#include

#include

using

namespace

std;

int main()

if(sum < 0)

}printf("case %d:\n", k);

printf("%d %d %d\n", maxx, s, e);

if(k != t)

printf("\n");

}return

0;}

動態規劃 HDU 1003 Max Sum

思路的話,並沒有什麼特別的,這道題使用dp的做法就可以了。include include include includeusing namespace std int dp 100005 int l 100005 記錄第i個字段的起始點 const int inf 0x3f3f3f3f int ma...

HDU 1003 Max Sum 動態規劃

這次看了這題的動態規劃寫法,頓時覺得好理解多了。這裡要對dp i 的意義進行一下說明,dp i 表示從1 i包含第i個數的最大子串和,如果前i 1個數的包含i 1在內的最大和為正數的話,那麼包含第i個數的最大子串和就是dp i 1 seq i 否則dp i 就等於seq i 了。該題的動態遞迴寫法並...

hdu 1003 Max Sum(最大子竄和)

最大子竄和,用b記錄當前的和,用sum記錄最大的和,當b 0的話,就讓b等於當前的ai值,若大於0,就繼續加 至於 1 0 0 0 4 最大和是第二個數到最後乙個 includeint main else b a i b是當前的子數和 if sum sum記錄最大的子數和 第乙個if永遠記錄的是當前...