HDOJ1003 MaxSum【逆推】

简介:

数组a用来存储输入的n个数

数组b用来存储当前位置所能取得的最大子串和值

数组c用来存储使b取得最大子串和的的终止位置(若ci=j,则是bi取得最大的子串和为i...j)

 

复制代码
//暴力求解~
#include <stdio.h> #define N 100001 int a[N],b[N],c[N]; int main() { int n,cas,i,j,k; int tsum,tmax,ti,tj; scanf("%d",&cas); for (i=1;i<=cas;i++) { scanf("%d",&n); for (j=0;j<n;j++) { scanf("%d",&a[j]); b[j]=0; c[j]=0; } tmax=0; for (j=0;j<n;j++) { tsum=0; for (k=j;k<n;k++) { tsum+=a[k]; if(tsum>b[j]) { b[j]=tsum; c[j]=k; } } if(b[j]>tmax) { tmax=b[j]; ti=j; tj=c[j]; } } printf("Case %d:\n",i); printf("%d %d %d\n",tmax,ti+1,tj+1); if(i!=cas) printf("\n"); } }
复制代码

 //优化的代码~

例如:按i=6..0的顺序推导哦~

i  0  1 2 3  4  5  6

a 0 6 -1 1 -6 7 -5

b 7 7  1 2  1  7 -5

c 5 5  5  5  5 5  6

只要用一个tmax和ti,tj记住最大的子串和就可以了~

Problem : 1003 ( Max Sum )     Judge Status : Accepted
RunId : 5922042    Language : C    Author : qq1203456195
Code Render Status : Rendered By HDOJ C Code Render Version 0.01 Beta
复制代码
#include <stdio.h>
#define N 1000005
int a[N],b[N],c[N];
int main()
{
    int n,cas,i,j,tsum,tmax,ti,tj;
//     freopen("in.txt","r",stdin);
//     freopen("out.txt","w",stdout);
    scanf("%d",&cas);
    for (i=1;i<=cas;i++)
    {
        scanf("%d",&n);
        for (j=0;j<n;j++)    scanf("%d",&a[j]);
        c[n-1]=n-1;
        b[n-1]=a[n-1];
        //注意tmax,ti,tj初始化
        tmax=a[n-1];
        ti=tj=n-1;
        for (j=n-2;j>=0;j--)
        {
            if(b[j+1]>0)    {//这里不能是>=
                b[j]=a[j]+b[j+1];
                c[j]=c[j+1];
            }else{
                b[j]=a[j];
                c[j]=j;
            }
            if(b[j]>=tmax){
                tmax=b[j];
                ti=j;
                tj=c[j];
            }
        }
        printf("Case %d:\n",i);
        printf("%d %d %d\n",tmax,ti+1,tj+1);
        if(i!=cas)    printf("\n");
    }
}
复制代码

 

 

本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/09/2493509.html,如需转载请自行联系原作者

相关文章
|
5月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
5月前
|
缓存 PyTorch 算法框架/工具
AI Infra之模型显存管理分析
本文围绕某线上客户部署DeepSeek-R1满血版模型时进行多次压测后,发现显存占用一直上升,从未下降的现象,记录了排查过程。
473 41
AI Infra之模型显存管理分析
|
8月前
|
数据建模 网络安全
IP地址https证书最新申请流程步骤
确保信息准确,遵循CA指导,遇到问题可联系客服。
|
10月前
|
运维 负载均衡 安全
slb传统硬件负载均衡器的性能瓶颈
【11月更文挑战第3天】
265 4
|
Oracle 关系型数据库
Oracle安装错误——[ INS-32010 ] 主目录位置包含无效字符
Oracle安装错误——[ INS-32010 ] 主目录位置包含无效字符
459 0
java.lang.IllegalArgumentException: Invalid character found in method name
java.lang.IllegalArgumentException: Invalid character found in method name
309 0
|
Dubbo Java BI
微服务框架(二十六)Grafana dashboard 定时报表
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为使用grafana-reporter生成grafana dashboard报表,并使用定时任务邮件发送
|
设计模式 供应链 测试技术
架构进阶之路:复杂业务开发与领域驱动设计
以下是在现公司,给成员做分享的资料。业务案例来自:一文教会你如何写复杂业务代码。作者:张建飞,进行了重新整理。
422 0
|
存储 移动开发 HTML5
HTML5基础知识总结总结(详细,附带源代码)
HTML5基础知识总结总结(详细,附带源代码)
288 0
|
存储 弹性计算 运维
阿里云云电脑怎么样?价格是多少?可以代替传统电脑吗?
阿里云云电脑怎么样?价格是多少?可以代替传统电脑吗?
1192 0