#include <STDIO.H>
typedef struct SU_tag{
SU_tag(){}
SU_tag(int a,int b,int c):max_sum(a),left(b),right(c){}
int max_sum;
int left;
int right;
}SU; SU find_max_crossing_subarray(int *a,int low,int mid,int high)
{
int left,left_max=a[mid],right,right_max=a[mid+],i,sum;
sum=;
for(i=mid;i>=low;i--){
sum+=a[i];
if(sum>=left_max){
left_max=sum;
left = i;
}
}
sum=;
for(i=mid+;i<=high;i++){
sum+=a[i];
if(sum>=right_max){
right_max = sum;
right = i;
}
}
return SU(left_max+right_max,left,right);
} SU find_max_subarray(int *a,int low,int high)
{
SU left,right,cross;
if(low == high){
return SU(a[low],low,high);
}else{
int mid = (low+high)/;
left = find_max_subarray(a,low,mid);
right = find_max_subarray(a,mid+,high);
cross = find_max_crossing_subarray(a,low,mid,high);
}
if(left.max_sum>=right.max_sum && left.max_sum>=cross.max_sum)
return left;
else if(cross.max_sum>=left.max_sum && cross.max_sum>=right.max_sum)
return cross;
else
return right;
} int main()
{
int t,n,i;
scanf("%d",&t);
i = ;
while(i<=t){
scanf("%d",&n);
int m=,*a=new int[n];
for(;m<n;m++)
scanf("%d",&a[m]);
SU r = find_max_subarray(a,,n-);
printf("Case %d:\n",i);
printf("%d %d %d\n",r.max_sum,r.left+,r.right+);
if(i!=t)
printf("\n");
delete a;
i++;
}
return ;
}

HD 1003 Max Sum 的递归解法的更多相关文章

  1. HDU 1003 Max Sum --- 经典DP

    HDU 1003    相关链接   HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...

  2. HDOJ(HDU).1003 Max Sum (DP)

    HDOJ(HDU).1003 Max Sum (DP) 点我挑战题目 算法学习-–动态规划初探 题意分析 给出一段数字序列,求出最大连续子段和.典型的动态规划问题. 用数组a表示存储的数字序列,sum ...

  3. hdu 1003 Max Sum (DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)   ...

  4. HDU 1003 Max Sum【动态规划求最大子序列和详解 】

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. hdu 1003 MAX SUM 简单的dp,测试样例之间输出空行

    测试样例之间输出空行,if(t>0) cout<<endl; 这样出最后一组测试样例之外,其它么每组测试样例之后都会输出一个空行. dp[i]表示以a[i]结尾的最大值,则:dp[i ...

  6. #1003 Max Sum

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 给你一串数列,让你求出其中 一段连续的子数列 并且 该子数列所有数字之和最大,输出该子数列的和.起点与终点 ...

  7. 杭电1003 Max Sum 【连续子序列求最大和】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目意思: 即给出一串数据,求连续的子序列的最大和 解题思路: 因为我们很容易想到用一个max ...

  8. HDU 1003 Max Sum * 最长递增子序列(求序列累加最大值)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  9. hdu 1003 Max sum(简单DP)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem ...

随机推荐

  1. HDU4044 GeoDefense(有点不一样的树上背包)

    题目大概说一棵n个结点的树,每个结点都可以安装某一规格的一个塔,塔有价格和能量两个属性.现在一个敌人从1点出发但不知道他会怎么走,如果他经过一个结点的塔那他就会被塔攻击失去塔能量的HP,如果HP小于等 ...

  2. ural 1437. Gasoline Station

    1437. Gasoline Station Time limit: 1.0 secondMemory limit: 64 MB Once a gasoline meter broke at a fi ...

  3. BZOJ3775 : 点和直线

    设第$i$条直线的解析式为$a_ix+b_iy+c_i=0$,$d_i=a_i^2+b_i^2$,则要求一个点$(x,y)$,使得$\sum\left(\frac{\left|a_ix+b_iy+c_ ...

  4. 解决Windows Server 2003不认U盘或移动硬盘的问题

    1.进入命令提示符环境(也就是DOS) 2.进入DISKPART程序 3.输入AUTOMOUNT ENABLE指令 4.OK,下次USB硬盘接入后就可以像XP 一样自动装载了.

  5. const放在函数前和放在函数后

    template < class T, class container = vector<T> > class MyClass{ private: T value; publi ...

  6. 【POJ】1151 Atlantis(线段树)

    http://poj.org/problem?id=1151 经典矩形面积并吧.....很简单我就不说了... 有个很神的地方,我脑残没想到: 将线段变成点啊QAQ这样方便计算了啊 还有个很坑的地方, ...

  7. 用wampserver 装的集成环境,命令行进不去提示mysql

    命令行进不去提示mysql 不是内部命令或外部命令. 解决办法,就是将mysql/bin路径加到path中去

  8. SQLLite 可以通过SQL语言来访问的文件型SQL数据库

    Web Storage分为两类: - sessionStorage:数据保存在session 对象中(临时) - localStorage:数据保存在本地硬件设备中(永久) sessionStorag ...

  9. POJ 1419 Graph Coloring(最大独立集/补图的最大团)

    Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4893   Accepted: 2271   ...

  10. [ZZ] 景深效果(Depth of Field) , Pass1 将场景渲染到一个RenderTarget,做为清晰版, Pass2: BluredRT , Pass3: WDepth = Depth / Far_Z_Clip

    http://blog.csdn.net/xoyojank/article/details/1883520   什么是景深效果? 景深效果,简称DOF,在人眼跟光学摄像设备上很常见.如下图: 简单地来 ...