HDU 最大上升子序列题解

来源:互联网 发布:软件职业技能培训学校 编辑:程序博客网 时间:2024/04/29 08:16

HDU1003 Max Sum

#include <stdio.h>int a[100010];int dp[100010];int main(int argc, char *argv[]){    int n,i,t;int qq=1;scanf("%d",&t);while(t--){int start,end,max,j1,j2;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);dp[0]=a[0];j1=j2=start=end=0;max=-100000;for(i=0;i<n;i++){if(dp[i-1]+a[i]>=a[i]){dp[i]=dp[i-1]+a[i];end=i;}//如果dp[i]为正 else{dp[i]=a[i];start=i;end=i;}//如果为dp[i]负 if(max<dp[i]){max=dp[i];j1=start;j2=end;}//记录max和开始结束//注意区别和start和end的区别 }printf("Case %d:\n",qq++);        printf("%d %d %d\n",max,j1+1,j2+1);        if(t!=0)            printf("\n");} return 0;}


0 0
原创粉丝点击