动态规划就是寻找最优解的过程

最重要的是找到关系式

hdu 1003

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003

题目大意:求最大字序列和,其实就是分成

以0结尾的序列

以1结尾的序列

以2结尾的序列

...

以n结尾的序列

所以以n结尾的序列的最大值就是以n-1结尾的序列的最大值+n的值

或最大值是n的值

关系式: d[i]=max(d[i-1]+a[i],a[i]) d[i]为以i结尾的序列和的最大值,a[i]为第i个数的值

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
long long a[];
long long d[];
int t[];
int main()
{
int T,k=,mi;
long long maxi=-,m=;
cin>>T;
while(T--)
{
int flag=;
int x=;
maxi=-;
m=;
int n,p;
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
}
d[]=;
for(int i=;i<=n;i++)
{ if(d[i-]+a[i]>=a[i])
d[i]=d[i-]+a[i];
else
d[i]=a[i];
}
for(int i=;i<=n;i++)
{
if(d[i]>maxi)
{
maxi=d[i];
p=i;
} }
for(int j=p;j!=;j--)
{
m=m+a[j]; if(m==maxi)
{
t[x]=j;
}
}
sort(t,t+x);
mi=t[];
while(a[mi-]==&&mi!=)
{
mi--;
if(mi==)
break;
} cout<<"Case "<<k++<<":"<<endl;
cout<<maxi<<" "<<mi<<" "<<p<<endl;
if(T!=)
cout<<endl;
}
return ;
}

hdu 1087

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087

题目大意:找出最大字序列和,其中字序列不一定是相邻的数,但需满足v[i]<v[j] 其中i<j

题解: 与上题一样,都是以d[n]结尾的字序列,不同的是它不能只根据d[n-1]就得到,需要从0~n-1的d[]值依次与d[n]判断,求最大值

关系式:d[i]=max{d[j]+v[i],v[i]}

#include<iostream>
using namespace std;
int v[];
int d[];
int main()
{
int n,i,j,max;
while(cin>>n)
{
if(n==)
break;
for(i=;i<n;i++)
cin>>v[i];
max=v[];
d[]=v[];
for(i=;i<n;i++)
{
d[i]=v[i];
for(j=;j<i;j++)
{
if(v[i]>v[j])
{
if(d[i]<d[j]+v[i])
d[i]=d[j]+v[i];
}
}
if(d[i]>max) //注意一直更新最大值
max=d[i];
} cout<<max<<endl; }
return ;
}

dp 动态规划 hdu 1003 1087的更多相关文章

  1. (DP)HDU - 1003 Max Sum

    这是一道DP入门题目,知识点是“最大连续子序列” 题目大意:给你一个长度为n的数字序列,取其中一段连续的序列,要求和最大: 分析:这是一道裸题,没有什么花里胡哨的东西,主要是写出状态转移方程 dp[i ...

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

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

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

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

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

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

  5. hdu 1003 hdu 1231 最大连续子序列【dp】

    HDU1003 HDU1231 题意自明.可能是真的进步了点,记得刚开始研究这个问题时还想了好长时间,hdu 1231还手推了很长时间,今天重新写干净利落就AC了. #include<iostr ...

  6. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

  7. 【ToReadList】六种姿势拿下连续子序列最大和问题,附伪代码(以HDU 1003 1231为例)(转载)

    问题描述:       连续子序列最大和,其实就是求一个序列中连续的子序列中元素和最大的那个. 比如例如给定序列: { -2, 11, -4, 13, -5, -2 } 其最大连续子序列为{ 11, ...

  8. HDU 1003(A - 最大子段和)

    HDU   1003(A - 最大子段和) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/A 题目: ...

  9. DP动态规划练习

    先来看一下经典的背包问题吧 http://www.cnblogs.com/Kalix/p/7617856.html  01背包问题 https://www.cnblogs.com/Kalix/p/76 ...

随机推荐

  1. HTML5的新增方法

    json的新增方法: parse()   将JSON转换为字符串:必须是严格的JSON格式: 用法 : var s = {"name":"name"}; JSO ...

  2. 移动APP的开发需求分析

    一.项目概况 项目名称为上海地铁游.本项目是以上海地铁为线索,开发的一个移动APP.主要目的是帮助用户实现根据当前位置选择最方便的地铁旅游点和旅游推荐,方便出行,让更多人可以借助地铁的便利去认识和体验 ...

  3. Element is not currently interactable and may not be manipulated

    Element is not currently interactable and may not be manipulated:元素当前不可交互,并且可能无法操作. 解决方法: 调用该方法,智能等待 ...

  4. ubantu14下vim的配置...

    日出江花红胜火,春来江水绿如蓝.---

  5. cookie手工注入

    1.先访问当前注入点文件名 2.修改cookie javascript:alert(document.cookie="id="+escape("1137")); ...

  6. SQL-Server使用点滴(二)

    二,对象的建立和使用 1,了解MSSql的[系统表] 对于SQL-Server中的所有对象,包括数据库,数据表,记录,字段,触发器,索引,数据类型等元素,均有对应的系统表记性记录.系统表是禁止直接删改 ...

  7. Java开发中经典的小实例-(输入三个数字判断三角形类型)

    import java.util.Scanner;public class threeTest {    public static void main(String[] args) {       ...

  8. [linux] scp无密码拷贝

    源服务器为s,ip为111.111.111.112. 目标服务器为d, ip为111.111.111.111 1>在源服务器新建用户 test_s, useradd test_s -g user ...

  9. PHP基础算法

    1.首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半. 思路:多少行for一次,然后在里面空格和星号for一次. <?php for($i=0;$i<=3;$i++ ...

  10. ubuntu 14.04 java开发环境搭建 jdk 以及 inteliJ IDEA安装

    1.安装包 jdk1.7.0_71 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-188026 ...