hdu 1858 Max Partial Value I(DP…
2013-09-11 14:05
309 查看
Max Partial Value I
TimeLimit: 1000/5000 MS
(Java/Others) Memory
Limit: 32768/65535 K (Java/Others)Total Submission(s):
542 Accepted
Submission(s): 216
Problem DescriptionHenryFour has a number of stones which have different values from
-4444 to 4444. He puts N stones in a line and wants to find the max
partial value of these N stones.Assume the values of the N stones in line are: v1, v2, v3, v4, ...,
vN. The partial vaule of stones from Lth stone to Rth stone (1 ≤ L
≤ R ≤ N) is the sum of all the stones between them. i.e.
PartialV(L, R) = v[L] + v[L+1] + .... + v[R] (1 ≤ L ≤ R ≤
N) Since the number of stones (N) is very very large, it is quite
difficult for HenryFour to find the max partial value. So could you
develop a programme to find out the answer for
him? InputThere are several test cases in the input data. The first line
contains a positive integer T (1 ≤ T ≤ 14), specifying the number
ot test cases. Then there are T lines. Each of these T lines
contains a positive number N followed by N integers which indicate
the values of the N stones in line.1 ≤ N ≤ 1,000,000-4444 ≤ v[i] ≤ 4444 OutputYour program is to write to standard output. For each test case,
print one line with three numbers seperated by one blank: P L R. P
is the max partial value of the N stones in line. L and R indicate
the position of the partial stones. If there are several Ls and Rs
that have the same value PartialV(Li, Ri) = P, please output the
minimum pair. For pair (Li, Ri) and (Lj, Rj), we define (Li, Ri)
< (Lj, Rj) if and only if: Li < Lj or
(Li == Lj and Ri < Rj) Sample Input3
4 32
-39 -30 -28
8 1 2
3 -10 1 -1 5 1
10 14
-12 -8 -13 3 5 42 -24 -32 -12 Sample Output32 1 1 6 1 3 50 5 7注意要定义成__int64类型,应为这个WA了好几次用G++编译通过#include<stdio.h>
#define inf 0x7fffffff
struct node
{
int l;
int r;
__int64 w;
}p[1000000];
__int64 a[1000000];
int main()
{
int t,i,k,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%I64d",&a[i]);
p[i].w=a[i];
p[i].l=p[i].r=i;
}
p[0].w=0;
p[0].l=1;
__int64 max=-inf;
for(i=1;i<=n;i++)
{
if(p[i].w<=p[i-1].w+a[i])
{
p[i].w=p[i-1].w+a[i];
p[i].l=p[i-1].l; }
if(p[i].w>max)
{
max=p[i].w;
k=i;
}
}
printf("%I64d %d
%d\n",max,p[k].l,p[k].r); }
}
相关文章推荐
- HDU-1858-Max Partial Value I,有坑点,不难;
- hdu 1858 Max Partial Value I
- hdu 1858 Max Partial Value I
- HDU 1858 Max Partial Value I
- HDU 2577 How to Type (DP)
- hdu 1081 To The Max
- 【hdu 1024】Max Sum Plus Plus —— dp && 滚动数组
- 杭电 1003--Max Sum(初级DP)
- hdu 2993 & POJ 2018 MAX Average Problem(斜率dp)
- HDU 2710 Max Factor
- HDU 2859 Phalanx(dp吧~ ~ ~)
- hdu 1024 Max Sum Plus Plus(dp && 最大m子段和)
- HDU 1024 Max Sum Plus Plus (DP·滚动数组)
- To the Max(动态规划DP)
- HDU 3415 Max Sum of Max-K-sub-sequence - dp&单调队列优化
- HDU 1003 Max Sum && HDU 1231 最大连续子序列 (DP)
- HDU 1024 Max Sum Plus Plus(普通dp && 滚动数组优化)
- hdu 1003 Max Sum
- hdu 3415 Max Sum of Max-K-sub-sequence 单调队列dp
- hdu--1176---dp && 滚动数组优化<porker>