hdoj 1003 学习思路
基本解题思路:动态规划,不考虑穷举,分治。
根据网上,状态转移方程是: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 学习思路的更多相关文章
- hdoj 1004 学习思路
hdoj 1004题目大概讲的是,将输入的字符串根据输入次数多少,输出出现次数最多的字符串. 题目逻辑很简单,就是需要选择相应的数据结构,看了别人提交的discuss,明显发现可以使用多种数据结构解这 ...
- Android——Cocosd2d-x手机游戏开发学习思路
手机APP应用如雨后春笋般冒了出来,而在众多的APP应用中,游戏占据了半壁江山.它丰富着人们的业余生活,增进了人们之间的沟通交流.也有许多开发的朋友对游戏开发情有独钟,他们不止是享受着有很多的人们去下 ...
- Java源码阅读的真实体会(一种学习思路)
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...
- [k8s]一些技巧性的yaml和dockerfile-docker学习思路
我会把一些dockerfile和yaml的技巧性东西不定期搜集到这里 docker学习思路 三部曲: 1,vm会搭建服务 2,docker会跑服务 3,k8s集群会调度该服务 存储 vm1 vm2 共 ...
- HyperLedger Fabric 学习思路分享
HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...
- Java源码阅读的真实体会(一种学习思路)【转】
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+ ...
- 【DM8168学习笔记6】学习思路整理
DavinciDM8168的开发是一套大的系统,包括ARM.DSP.以及他们的通信协作.对学习思路做简单总结: 一. 对于整体框架的把握 参考了一些文章.介绍davinci整体基础知 ...
- Angular 学习思路
近些年前端框架非常多,主流的有 Vue.React.Angular 等.我参与的项目中使用较多的是 Vue.因为 Vue 学习难度不大,上手很快,代码简洁,而且使用 Vue 全家桶(Vue + Vue ...
- JavaWeb基础学习体系与学习思路
对于JAVAWEB的学习,首先一定要明确的是学习整体框架和思路,要有一个把控.对于WEB,很多人认为是做网页,简单的把静态网页与JAVAWEB与网页设计一概而论. 拿起一本JS就开始无脑的学习,学了一 ...
随机推荐
- [UE4]解决角色影子的问题
一.自己应该是不能看到第一人称模型的影子,只要将第一人称模型影子不投影的就可以了.Cast Shadow勾选去掉就不会有影子了. 二.在第一人称视角中,枪支也是不应该有投影的.在weanpon中新增2 ...
- meta 标签禁止缩放失效
之前我们能通过设置meta来禁止用户缩放页面 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1 ...
- Mybatis 系列4-结合源码解析节点:typeAliases
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- c#第一周的游戏
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- 十三篇系列:king转折点,wooga瓶颈,supercell营收结构
转自:http://gamerboom.com/archives/95125 十三篇系列:king的历史转折点,wooga的瓶颈,supercell的营收结构 第一篇 这句话In other word ...
- VS2008自定义快捷键设置
点[Keyboard..]
- 微信小程序,个人开发者创业新平台
在移动互联网世界,微信无小事,微信的事,是整个创业圈的事.经过一年多的酝酿,2017年1月9日,微信小程序发布了.发布伊始,无疑是对整个业界注入一剂兴奋剂,整个微信的生态圈的企业和个人开发者,都跃跃欲 ...
- dns 域名地址
Public DNS+ 是属于 腾讯云旗下的公共 DNS 服务.拥有 80 多条国内线路和 4 条海外线路,有 BGP Anycast 技术,也是国内首家支持谷歌 ECS (edns-client-s ...
- HTMLTestRunner不生成报告
使用HTMLTestRunner想生成测试报告,尝试了很多次了,就是无法生成,在百度搜索发现是快捷键问题 工具:Pycharm Ctrl+Shift+F10运行不会生成脚本 Alt+Shift+F10 ...
- inno setup 软件打包
2017-05-26 软件开发完毕以后,要进行打包发布,有几款打包用的软件很常见:innosetup,nullsoft,installshield.本人今天终于把自己独立开发的呈现软件打了包.第一个版 ...