hdu 1003 Max Sum(连续最大和)
2013-09-01 21:51
330 查看
题目连接:1003 Max Sum
题目大意:在一个数组中, 找到连续最大的和, 并输出它们的范围, 尽量长。
解题思路:累计求和, 复杂度o(n), 听别人讲了一下这种方法, 就来试试看了。
#include <stdio.h>
const int N = 100005;
const int low = -0xfffffff;
int main() {
int cas, t = 1, n, num
, l, r, rec, Max, sum;
scanf("%d", &cas);
while (cas--) {
// Read;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &num[i]);
Max = sum = low;
for (int i = 0; i < n; i++) {
if (sum == low) {
rec = i;
sum = num[i];
}
else
sum += num[i];
if (sum >= Max) {
Max = sum;
l = rec;
r = i;
}
if (sum < 0) sum = low;
}
printf("Case %d:\n", t++);
printf("%d %d %d\n", Max, l + 1, r + 1);
if (cas) printf("\n");
}
return 0;
}
题目大意:在一个数组中, 找到连续最大的和, 并输出它们的范围, 尽量长。
解题思路:累计求和, 复杂度o(n), 听别人讲了一下这种方法, 就来试试看了。
#include <stdio.h>
const int N = 100005;
const int low = -0xfffffff;
int main() {
int cas, t = 1, n, num
, l, r, rec, Max, sum;
scanf("%d", &cas);
while (cas--) {
// Read;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &num[i]);
Max = sum = low;
for (int i = 0; i < n; i++) {
if (sum == low) {
rec = i;
sum = num[i];
}
else
sum += num[i];
if (sum >= Max) {
Max = sum;
l = rec;
r = i;
}
if (sum < 0) sum = low;
}
printf("Case %d:\n", t++);
printf("%d %d %d\n", Max, l + 1, r + 1);
if (cas) printf("\n");
}
return 0;
}
相关文章推荐
- Max Sum(hdu1003最大连续子串和+分治法)
- HDU1003 Max Sum(最大连续子序和、贪心、DP)
- HDU - 1003 Max Sum (最大连续和)
- HDU 1003 Max Sum(最大连续子段和)
- HDU 1003 Max Sum【最大连续和】
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- HDU 1003 Max Sum 求最大连续和
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- hdu(1003)——Max Sum(最大连续子段和)
- HDU 1003 MAX SUM 最大连续子段和DP
- hdu1003 Max Sum (求连续的和最大的自链
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- HDU-1003 Max Sum(最大连续子段和)
- hdu1003——max sum;(最大连续字串和)
- HDU 1003 Max Sum 最大连续和 分治法
- HDU 1003 Max Sum 最大连续上升和
- Max Sum 最大连续和的子序列 HDU 1003 (一维序列DP)
- DP训练 hdu 1003 Max Sum 最大连续子段和