基本解题思路:动态规划,不考虑穷举,分治。

根据网上,状态转移方程是:MaxSum[i] = Max{ MaxSum[i-1] + A[i], A[i]}

翻译公式:到当前位置i 时,最大子序列和为: i-1 时最大子序列和 + 当前数 与 当前数 相比中大的那个。

(翻译的不清楚也就说明对问题了解不够)

这个状态转移公式即为解决问题,划分问题的方法。这样划分子问题对不对。。。。。不去证明。

从理解的角度上来说,对于一个数串,把它分为maxsum(a0…ai-1),ai。那么对于i,来说,最大子序列和的值即为,maxsum(ai-1)+ ai 或者 ai。

对于初始状态 i = 0; 时, maxsum = a0; 当 i=1 时 maxsum = maxsum(a0) + ai or ai。

废话这么多,也没证明什么出来,反正从理解公式上来说,这个状态转移公式提出了问题的解决办法。

实际操作上来说。有三个变量:sum maxsum i.

对于数组A, 从0 开始计算sum, sum = a0 + … + , maxsum 设置为-10010, i 从 0开始计算。

当sum > maxsum 时, maxsum = sum.

若sum < 0 , sum = 0 及说明目前的sum+ai, 肯定小于 ai, 即重新开始计算子串值。

将maxsum设为一个很大的负数的好处是就不用考虑数组a全为负数的情况。

对于最大值的子串的索引,可以用三个变量表示,start temp end,初始值全设为0,

如果sum > max  start = temp, end = i

如果sum < 0  sum = 0  temp = i+1

由于结果比实际的索引大1 则需要对start end 加一。

参考代码

http://blog.csdn.net/worker90/article/details/6649897

下面是我写的代码。

#include <stdio.h>
#include <stdlib.h> void max_sum(int *a, int solution[], int N)
{
int sum, i, j, maxsum;
sum = ;
j = ;
int start, temp, end;
maxsum = -;
temp = ;
start = ; end = ; for (i = ; i < N; i++) {
sum += a[i];
if (sum > maxsum) {
maxsum = sum;
start = temp;
end = i ;
}
if (sum < ) {
sum = ;
temp = i + ;
}
}
solution[] = maxsum;
solution[] = start +;
solution[] = end + ; } int main(void)
{
int T, N;
int a[], solution[];
int i;
int j = ;
scanf("%d", &T); while (T > ) {
scanf("%d", &N);
for (i = ; i < N; i++) {
a[i] = ;
scanf("%d", &a[i]);
} max_sum(a, solution, N);
printf("Case %d:\n", j); printf("%d %d %d\n", solution[], solution[], solution[]);
if (T > ) {
printf("\n");
}
j++;
T--;
}
system("pause");
}

hdoj 1003 学习思路的更多相关文章

  1. hdoj 1004 学习思路

    hdoj 1004题目大概讲的是,将输入的字符串根据输入次数多少,输出出现次数最多的字符串. 题目逻辑很简单,就是需要选择相应的数据结构,看了别人提交的discuss,明显发现可以使用多种数据结构解这 ...

  2. Android——Cocosd2d-x手机游戏开发学习思路

    手机APP应用如雨后春笋般冒了出来,而在众多的APP应用中,游戏占据了半壁江山.它丰富着人们的业余生活,增进了人们之间的沟通交流.也有许多开发的朋友对游戏开发情有独钟,他们不止是享受着有很多的人们去下 ...

  3. Java源码阅读的真实体会(一种学习思路)

    Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...

  4. [k8s]一些技巧性的yaml和dockerfile-docker学习思路

    我会把一些dockerfile和yaml的技巧性东西不定期搜集到这里 docker学习思路 三部曲: 1,vm会搭建服务 2,docker会跑服务 3,k8s集群会调度该服务 存储 vm1 vm2 共 ...

  5. HyperLedger Fabric 学习思路分享

    HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...

  6. Java源码阅读的真实体会(一种学习思路)【转】

    Java源码阅读的真实体会(一种学习思路)   刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+ ...

  7. 【DM8168学习笔记6】学习思路整理

        DavinciDM8168的开发是一套大的系统,包括ARM.DSP.以及他们的通信协作.对学习思路做简单总结:     一.  对于整体框架的把握 参考了一些文章.介绍davinci整体基础知 ...

  8. Angular 学习思路

    近些年前端框架非常多,主流的有 Vue.React.Angular 等.我参与的项目中使用较多的是 Vue.因为 Vue 学习难度不大,上手很快,代码简洁,而且使用 Vue 全家桶(Vue + Vue ...

  9. JavaWeb基础学习体系与学习思路

    对于JAVAWEB的学习,首先一定要明确的是学习整体框架和思路,要有一个把控.对于WEB,很多人认为是做网页,简单的把静态网页与JAVAWEB与网页设计一概而论. 拿起一本JS就开始无脑的学习,学了一 ...

随机推荐

  1. lamda匿名函数(与sorted(),filter(),map() 一起用), 递归函数, 二分查找

    一. 匿名函数 为了解决一些简单的需求而设计的一句话函数.  lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数 语法:    函数名 = lambda 参数: 返回值 ...

  2. 使用IDEA进行Lua代码调试、自动提示、代码跳转、智能重命名

    试了几个Lua IDE后,Lua Studio.Lua Glider.VS+babelua插件.Sublime都不是特别满意.直到发现了国人自创的另一个神奇工具:基于IDEA的EmmyLua插件.该插 ...

  3. tomcat Error:NB:JAVA_HOME should point to a JDK not a JRE 解决方法

    环境:win7 tomcata7.0解压版本 执行:service.bat install 报错:JAVA_HOME should point to a JDK not a JRE 网上找了几种解决方 ...

  4. Select模式和超时

    fd_set rset; FD_ZERO(&rset); int nready; int maxfd; int fd_stdin = fileno(stdin); if(fd_stdin &g ...

  5. xinetd网络

    简单Web服务器 基本的HTTP协议 请求服务器数据 GET /文件或目录 HTTP/1.1 协议头部分(可选) /r/n(协议头结束) 服务器应答浏览器 HTTP/1.1 200 OK conten ...

  6. RecyclerView添加条目点击事件setOnItemClickListener,不是在Adapter中设置;

    RecyclerView不像ListView,可以直接写setOnItemClickListener,我们大部分都是在Adapter中的设置点击事件,这个是使用RecyclerView的addOnIt ...

  7. @Autowired与@Resource 详细诠释和区别(附带例子)

    @Autowired 与@Resource:1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配( ...

  8. scrapy中 selenium(中间件) + 语言处理 +mysql

    在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值.但是通过观察我们会发现,通过 ...

  9. vuejs实现瀑布流布局(一)

    一直以来,习惯了jquery的DOM操作方式,突然间,开始学习使用vuejs,很多时候,操作DOM观念总是转换不过来,虽然也能实现各种效果,但是总有点不伦不类的. 就类似于最近在做的瀑布流布局,正常的 ...

  10. GNU coreutils

    内核实用程序,针对文本及文件操作.涉及到102条linux命令.命令列表:cp.install.ln.mv.ls.echo…… 常见选项 1.退出状态 2.备份选项 cp, install, ln, ...