http://acm.hdu.edu.cn/showproblem.php?pid=1231
动态转移方程:f(n) = max(a, a+f(n-1));
//hdu_1231 #include <stdio.h> int max(int a, int b) { return a > b ? a : b; } int main() { // freopen("input.txt","r", stdin); int arr[10001]; int dp[10001]; int n, i; int ma; int start, end; int starttmp, endtmp; while(scanf("%d", &n)&&n){ for(i = 0; i < n; i ++){ scanf("%d", &arr[i]); dp[i] = 0; } dp[n] = 0; bool f = false; ma = dp[n-1] = arr[n-1]; starttmp = endtmp = start = end = arr[n-1]; for(i = n - 2; i >= 0; i --){ dp[i] = max(arr[i], arr[i]+dp[i+1]); if(dp[i] == arr[i]){ start = end = arr[i]; } else start = arr[i]; if(ma <= dp[i]){ ma = dp[i]; starttmp = start; endtmp = end; } } if(ma < 0)printf("0 %d %d\n", arr[0], arr[n-1]); else if(ma == 0)printf("0 0 0\n"); else printf("%d %d %d\n", ma, starttmp, endtmp); } return 0; }