HDU - 1003 Max Sum (最大连续和)
2014-07-17 15:12
288 查看
题目:HDU - 1003 Max Sum
题意:
n个数里面,找一段连续的数相加,输出其中的最大的和,并输出起点、终点
分析:
相加后大于该点的值,则加入当前连续段,更新该点为终点
相加后小于该店的值,则结束当前连续段,更新该点为起点、终点
核心:
题意:
n个数里面,找一段连续的数相加,输出其中的最大的和,并输出起点、终点
分析:
相加后大于该点的值,则加入当前连续段,更新该点为终点
相加后小于该店的值,则结束当前连续段,更新该点为起点、终点
核心:
dp[i] = max(a[i], dp[i-1]+a[i]);代码:
#include <stdio.h> #include <iostream> #include <string.h> #include <string> #include <math.h> #include <algorithm> #include <queue> #include <stack> #include <map> #include <vector> #include <time.h> using namespace std; int a[100000+10]; int main() { //freopen("a.txt", "r", stdin); int t, n, i, j, Case = 1; scanf("%d", &t); while(t--) { scanf("%d", &n); for(i = 1; i<=n; i++) { scanf("%d", &a[i]); } int begin=1, end=1, x=1, y=1; int sum = 0, ans = a[1]-1; for(i = 1; i<=n; i++) { if(sum + a[i] >= a[i]) { sum += a[i]; end = i; } else { sum = a[i]; begin = i; end = i; } if(ans < sum) { ans = sum; x = begin; y = end; } } if(Case>1)printf("\n"); printf("Case %d:\n", Case++); printf("%d %d %d\n", ans, x, y); } return 0; }
相关文章推荐
- HDU 1003 Max Sum(最大连续子列和)
- Max Sum(hdu1003最大连续子串和+分治法)
- hdu1003——max sum;(最大连续字串和)
- HDU 1003 MAX SUM 最大连续子段和DP
- HDU - 1003 Max Sum (最大连续和)
- hdu1003 Max Sum (求连续的和最大的自链
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- HDU 1003 Max Sum 求最大连续和
- DP训练 hdu 1003 Max Sum 最大连续子段和
- HDU 1003 Max Sum 最大连续上升和
- HDU 1003 Max Sum (最大连续子序和)
- hdu 1003 Max Sum(连续最大和)
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- hdu(1003)——Max Sum(最大连续子段和)
- HDU-1003 Max Sum(最大连续子段和)
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- hdu 1003 Max Sum【一维数组最大连续和】