DP 动态规划 Problem A 1001 最长子序列
来源:互联网 发布:共享卫士 网络尖兵 编辑:程序博客网 时间:2024/06/06 14:29
Problem A ID:1001
简单题意:给出一组含负数的数,求最大子序列,并求出此序列的首尾位置。
解题思路形成过程:从第一个数开始遍历,一直遍历到最后一个。
除第一个数以外:如果以前一个数为尾的最大子序列(设为cmax[i-1])大于等于0,则以当前这个数(设为a[i])为结尾的最大子序列为cmax[i]=cmax[i-1]+a[i];反之,如果cmax[i-1]<0,则cmax[i]=a[i] 用另一个数组来储存以每个数为结尾时,最大子序列的起始位置。
找出其中的最大值,输出i的位置,以及相对应的子序列的起始位置。
感想:这道题的输出格式很容易出现错误,最后一组数据输出后不输出回车也会PE。
细节上出现了一点小问题,导致一种情况会出现错误(比如所有数都是相同的负数时)。
代码最起码在逻辑上一定要足够完美。如果出现了WA,就想想还有那种情况出现在了考虑之外,多想几种样例来试一下。
代码:#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[2000001];int cmax[2000001];int tag[2000001];int main(){ // freopen("1.txt","r",stdin); int n,p=1; cin>>n; while(n--) { int num,tmax,ttag; scanf("%d",&num); for(int i=0;i<num;++i){ scanf("%d",&a[i]); if(i==0){ cmax[0]=a[0]; tag[0]=0; tmax=a[0]; ttag=0; } else{ if(cmax[i-1]>=0){ cmax[i]=a[i]+cmax[i-1]; tag[i]=tag[i-1]; } else{ cmax[i]=a[i]; tag[i]=i; } if(cmax[i]>tmax){ tmax=cmax[i]; ttag=i; } } } printf("Case %d:\n",p++); printf("%d %d %d",tmax,tag[ttag]+1,ttag+1); if(n!=0) printf("\n\n"); else printf("\n"); }}
0 0
- DP 动态规划 Problem A 1001 最长子序列
- 最长公共子序列-动态规划DP
- 最长共同子序列 --- DP(动态规划)
- 最长上升子序列 动态规划 dp
- DP 动态规划 Problem B 1002 求最长上升子序列的长度
- LCS(最长公共子序列)和dp(动态规划)
- 动态规划(DP)之最长上升子序列
- NYOJ - 36 - 最长公共子序列(LCS,动态规划DP)
- 最长上升子序列问题-动态规划(DP)
- 动态规划(DP)之最长上升子序列问题
- codevs1576 最长严格上升子序列 动态规划dp
- 最长递增子序列-动态规划dp-51node
- 最长公共子序列(dp动态规划)
- 动态规划----最长子序列
- 【最长子序列 动态规划】
- 动态规划----最长子序列
- 最长子序列--动态规划
- DP 动态规划 Problem E 1005 最大递增子序列
- 大连旅游攻略
- 怎样使用OpenCV进行人脸识别
- Error:Execution failed for task ':myapplication:processDebugResources'. > com.android.ide.common.pro
- C/C++复习:成绩统计(结构体)
- 理解哈希表
- DP 动态规划 Problem A 1001 最长子序列
- Object-c------语法预览
- IOS适配-快速适配篇
- Alpha and Beta
- 如何查找论文是否被SCI,EI检索
- Objective-c 字符串的拼接
- Chart.js 使用示例
- linux 更换 软件源后 GPG错误
- Linux 技巧:让进程在后台可靠运行的几种方法