dp 动态规划 hdu 1003 1087
动态规划就是寻找最优解的过程
最重要的是找到关系式
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的更多相关文章
- (DP)HDU - 1003 Max Sum
这是一道DP入门题目,知识点是“最大连续子序列” 题目大意:给你一个长度为n的数字序列,取其中一段连续的序列,要求和最大: 分析:这是一道裸题,没有什么花里胡哨的东西,主要是写出状态转移方程 dp[i ...
- HDOJ(HDU).1003 Max Sum (DP)
HDOJ(HDU).1003 Max Sum (DP) 点我挑战题目 算法学习-–动态规划初探 题意分析 给出一段数字序列,求出最大连续子段和.典型的动态规划问题. 用数组a表示存储的数字序列,sum ...
- hdu 1003 MAX SUM 简单的dp,测试样例之间输出空行
测试样例之间输出空行,if(t>0) cout<<endl; 这样出最后一组测试样例之外,其它么每组测试样例之后都会输出一个空行. dp[i]表示以a[i]结尾的最大值,则:dp[i ...
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- hdu 1003 hdu 1231 最大连续子序列【dp】
HDU1003 HDU1231 题意自明.可能是真的进步了点,记得刚开始研究这个问题时还想了好长时间,hdu 1231还手推了很长时间,今天重新写干净利落就AC了. #include<iostr ...
- (转)dp动态规划分类详解
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
- 【ToReadList】六种姿势拿下连续子序列最大和问题,附伪代码(以HDU 1003 1231为例)(转载)
问题描述: 连续子序列最大和,其实就是求一个序列中连续的子序列中元素和最大的那个. 比如例如给定序列: { -2, 11, -4, 13, -5, -2 } 其最大连续子序列为{ 11, ...
- HDU 1003(A - 最大子段和)
HDU 1003(A - 最大子段和) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#problem/A 题目: ...
- DP动态规划练习
先来看一下经典的背包问题吧 http://www.cnblogs.com/Kalix/p/7617856.html 01背包问题 https://www.cnblogs.com/Kalix/p/76 ...
随机推荐
- 面向对象day1
一.什么是面向对象 之前我们学习过面向过程和函数式编程,在讲函数的时候有说过之所以有函数式编程是因为面向过程编程是根据业务逻辑从上到下垒代码,会出现大量代码的重用和臃肿,so,函数式编程将同一功能的代 ...
- linux开启telnet
windows客户端如果通过cmd窗口连接到远程linux服务器,可以使用telnet: centos系统默认telnet 23端口是关闭的. 服务器本地使用nmap ip地址 -p 23 查看tel ...
- 随机生成验证码import random
#!/usr/bin/env python import random temp = "" for i in range(6) : num = random.randrange(0 ...
- JavaScript parseInt() 函数
定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 语法 parseInt(string, radix) 参数 描述 string 必需.要被解析的字符串. radix 可选.表 ...
- 。tar.gz(bz或bz2等)安装
tar.gz(bz或bz2等) 一.安装1.打开一个SHELL,即终端2.用cd 命令进入源代码压缩包所在的目录3.根据压缩包类型解压缩文件(*代表压缩包名称)tar -zxvf ****.tar.g ...
- 通过js引用外部脚本(嘿嘿,方便直接在浏览器上调试抓取代码)
最近折腾爬虫,后端使用jQuery进行数据采集,一般都是先从浏览器中将采集代码调试好后直接放到后端跑了. 有些网址没有引用jQuery,那调试起来就不方便了,可以用以下代码动态添加script标签,将 ...
- 28.zookeeper单机(Standalones模式)和集群搭建笔记
zookeeper单机(Standalones模式)和集群搭建: 前奏: (1).zookeeper也可以在windows下使用,和linux一样可以单机也可以集群,具体就是解压zookeeper-3 ...
- MySQL 5.6 双机热备windows7
MySQL 5.6 双机热备 目录: 1.说明 2.数据手工同步 3.修改主数据库配置文件 4.修改从数据库配置文件 5.主数据库添加备份用户 6.从数据库设置为Slave 7.验证 1.说明 1)数 ...
- 解决 java 使用ssl过程中出现"PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
今天,封装HttpClient使用ssl时报一下错误: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExc ...
- JAVA 1.6 流程控制语句
1. 条件运算符(三元表达式),其形式为:type d = a ? b : c; 具体化形式为:int d = 2 < 1 ? 3 : 4;2. 轻量级的文本编辑器:UltraEdit.Edit ...