最大连续子序列(HDU - 1231)
来源:互联网 发布:淘宝上怎么看卖家地址 编辑:程序博客网 时间:2024/05/16 04:54
题意:最大连续子序列裸
思路很简单,其实就是枚举,对于第i个数,考虑dp[i-1]+num[i]和num[i]的大小,即,是跟着前面一起玩呢还是另起一家->dp[i]=max(dp[i-1]+num[i],dp[i]),每次都尝试更新答案,即可求得最大值。
if(dp[i-1]>0){ dp[i]=dp[i-1]+num[i];}else{dp[i]=num[i];left=num[i];}
这道题目还有一个要求就是要求出序列的头和尾的位置。在计算过程中记录,答案的的时候把头尾一起更新掉即可。具体见代码:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<cstdlib>#include<vector>#define INF 100000000#define MAXNUM 10007#define pi 3.1415926using namespace std;int num[MAXNUM];int dp[MAXNUM];int main(){int k;while(scanf("%d",&k)!=EOF&&k!=0){int flag=0;for(int i=0;i<k;i++){scanf("%d",&num[i]);if(num[i]>=0) flag=1;}if(flag){int left=num[0];int fleft=num[0];int right=num[k-1];int fright=num[k-1];dp[0]=num[0];int ans=dp[0]; for(int i=1;i<k;i++){ if(dp[i-1]>0){ dp[i]=dp[i-1]+num[i];}else{dp[i]=num[i];left=num[i];} if(dp[i]>ans){ ans=dp[i]; fleft=left; fright=num[i];} } printf("%d %d %d\n",ans,fleft,fright); }else printf("0 %d %d\n",num[0],num[k-1]);memset(dp,0,sizeof(dp));}}
0 0
- HDU 1231(最大连续子序列)
- hdu 1231(最大连续子序列)
- 最大连续子序列(HDU - 1231)
- hdu 1231 最大连续子序列 【最大连续子串】
- 最大连续子序列和(经典DP) 之 hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列和
- hdu 1231 最大连续子序列(DP)
- HDU-1231 最大连续子序列
- HDU 1231 最大连续子序列 (dp)
- HDU 1231 最大连续子序列
- hdu 1231最大连续子序列 【DP】
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列
- HDU 1231 最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列
- JS:利用arguments求平均值
- 可运营版微信红包牛牛游戏源码免费分享
- 《Hello World》python学习之pygame画图模块
- 【poj1741】tree 点分治
- Linux 压缩命令小记
- 最大连续子序列(HDU - 1231)
- Web前端
- 70.在Mac上打造方便好用的Python开发环境
- LCA
- 分布式消息队列RocketMQ--事务消息--解决分布式事务的最佳实践
- 62. Unique Paths
- 2.18.1成绩转换
- 动态规划LCS问题( HDU - 1159 Common Subsequence)
- [形象的解释神经网络激活函数的作用是什么?]