dp 动态规划 hdu 1003 1087

时间:2022-12-14 12:23:45

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

最重要的是找到关系式

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&lpar;HDU&rpar;&period;1003 Max Sum &lpar;DP&rpar;

    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. 转载:《TypeScript 中文入门教程》 7、模块

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变 ...

  2. 常用js总结1

    1.cookie.js(封装了cookie的基本操作) 1.引入cookie.js <script type="text/javascript" src="../j ...

  3. &lbrack;CareerCup&rsqb; 3&period;3 Set of Stacks 多个栈

    3.3 Imagine a (literal) stack of plates. If the stack gets too high, it might topple. Therefore, in ...

  4. 常见sql的error解决方法

    1.sqlserver 2008 login failed: error 18456 这是很可能是因为你没有选择sql and windows登录的模式导致sql server的用户登录失败 解决方法 ...

  5. 关于&OpenCurlyDoubleQuote;minSdk&gt&semi;deviceSdk”解决办法

    昨天,Android Studio开着,接华为测试机到Mac上,点运行键要下载搜杰天气时,出现"minSdk(API 17) > deviceSdk(API 16)"的提示, ...

  6. ES6 Promise 对象

    Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Pro ...

  7. python3&plus;requests库框架设计01-自动化测试框架需要什么?

    什么是自动化测试框架 关于自动化测试框架的定义有很多,在我大致理解下就是把能实现不同功能的软件组合在一起,实现特定的目的,这就是一个简单的自动化测试框架. 接口自动化测试框架核心无非是选择 一个用来编 ...

  8. JS进阶之---this的指向

    this到底指向什么地方,决定于函数的调用方式. 1. 指向全局变量 --- 函数被单独调用的时候 function fn() { console.log( this.a ); } var a = 2 ...

  9. NHibernate many-to-one映射

    many-to-one 数据方面,多条对一条. 非主键字段与主键字段的关联,在类中实现了一对一的单向映射.在类中是单实体映射. 订单充值业务.显然,一单位可以有多个充值信息. 通过表 Deposit里 ...

  10. git commit --amend的撤销方法

    某同事执行git commit 时太兴奋,执行了 git commit --amend 慌了,不敢编辑上一个commit的description了,直接选择了wq退出,然而git毕竟强大,默认将改动合 ...