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 ...
随机推荐
- 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机
转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...
- android源码修改,实现长按电源键直接关机
版本:android 4.4.2 源文件路径:frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManage ...
- Struts框架2ActionError类 内部资料 请勿转载 谢谢合作
ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中.ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的 ...
- Java项目多数据源配置
由于种种原因,有的时候可能要连接别人的数据库,或者不同的数据库没法自动转换,重构起来数据量又太大了,我们不得不在一个项目中连接多个数据源.从网上找了各种资料,只有这位大神给出的解决方案一下子就成功了. ...
- zigbee学习之路(十五):基于协议栈的按键实验
一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...
- python学习之迭代器与生成器
1.迭代器省内存 迭代器只允许往后读数据,不允许回读数据 迭代器不能跳着读文件,因为他是一点一点加载文件内容到内存的,读完了可以销毁或丢掉 2.生成一个迭代器 a = iter(["fd&q ...
- mysql 替换某个字段中的某个字符
遇到这么个情况: 比如: Msql里面的某个表的某个字段里面存储的是一个人的地址,有一天这个地址的里面的某个地 名变了,那么他的地址也就要变: 比如: 原来是: number ...
- AIDMA VS AISAS vs ISMAS 营销法则
AIDMA法则与传统媒体时代 引起注意——产生兴趣——培养欲望——形成记忆——购买行动 注:AIDMA,传统消费者行为学理论模型,即:Attention(引起注意),Interest (引起兴趣),D ...
- python操作Excel--使用xlrd
一.安装xlrd http://pypi.python.org/pypi/xlrd 二.使用介绍 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open ...
- AFNetworking的POST上传
- (void)download { // 1.创建网络管理者 // AFHTTPSessionManager 基于NSURLSession AFHTTPSessionManager *manager ...