這次看了這題的動態規劃寫法,頓時覺得好理解多了。
這裡要對dp[i]的意義進行一下說明,dp[i]表示從1~i包含第i個數的最大子串和,如果前i-1個數的包含i-1在內的最大和為正數的話,那麼包含第i個數的最大子串和就是dp[i-1]+seq[i],否則dp[i] 就等於seq[i]了。
該題的動態遞迴寫法並沒有直接給出最終答案的狀態,但是卻能夠根據另外的狀態推到出答案。這點值得我們思考。
**如下:
#include #include#include
#include
#define maxn 100005
using
namespace
std;
intn, dp[maxn], seq[maxn], p[maxn], begin, end;
inline
int max(int x, int
y)void dp(int &max)
if (max }
}int
main()
printf(
"case %d:\n
", ca);
dp(ans);
printf(
"%d %d %d\n
", ans, begin, end);
if (ca !=t)
}return0;
}
動態規劃 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嘛 當sum值大於最大值時,就記下最大值以及這個值對應的左起和右終的下標。當sum 0時,證明加上當前數整個數值為負,這個負數一定不會是下乙個最大子串行的成員,所以起始點要從當前位置的下一位開始,sum也要從新開始,因為下乙...
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永遠記錄的是當前...