NYOJ 823 人形序列
2015-08-09 10:17
375 查看
题目信息:
难度:2
描述 给你一个序列,你能求出最长的人字形子序列吗?即先递增后递减且递增递减长度相等的序列,且子序列中相邻元素不相同
输入多组测试数据,每组测试数据第一行输入一个N(1<=N<=50),第二行输入N个数即为给定序列, 输入数在int范围内,输入0程序结束输出输出最长人字形序列长度样例输入
样例输出
提示第二组数据的其中一个满足条件子序列为:2 3 5 2 1
解题思路:
也算是动态规划的最长子序列问题吧,要求对称,可以设置两个动态规划数组,一个存由前向后的最长递增子序列,另一个存由后向前的最长递增子序列。最后根据两个数组的长度以及最后一位的大小来判断和输出即可。
代码部分:
人形序列
时间限制:1000 ms | 内存限制:65535 KB难度:2
描述 给你一个序列,你能求出最长的人字形子序列吗?即先递增后递减且递增递减长度相等的序列,且子序列中相邻元素不相同
输入多组测试数据,每组测试数据第一行输入一个N(1<=N<=50),第二行输入N个数即为给定序列, 输入数在int范围内,输入0程序结束输出输出最长人字形序列长度样例输入
5 1 3 5 4 2 9 1 2 2 3 5 1 2 3 1 0
样例输出
5 5
提示第二组数据的其中一个满足条件子序列为:2 3 5 2 1
解题思路:
也算是动态规划的最长子序列问题吧,要求对称,可以设置两个动态规划数组,一个存由前向后的最长递增子序列,另一个存由后向前的最长递增子序列。最后根据两个数组的长度以及最后一位的大小来判断和输出即可。
代码部分:
#include <stdio.h> #include <string.h> int insert(int dp[],int k,int x) { int i; for(i=k;i>=0;i--) { if(dp[i]<x) { dp[i+1]=x; if(k==i) { return 1; } else { return 0; } } } } int main() { int n,i,j,head,tail; int seq[55],dp1[30],dp2[30]; dp1[0]=-0xffffff;dp2[0]=-0xffffff; while(scanf("%d",&n)&&n) { head=0;tail=0; for(i=0;i<n;i++) scanf("%d",&seq[i]); if(n<=2) { printf("1\n"); continue; } for(i=0,j=n-1;i<=j;i++,j--) { if(i==j) { if(insert(dp1,head,seq[i])==1) head++; break; } while(insert(dp1,head,seq[i])!=1) { i++; if(i>=j) break; } if(i>j) break; else if(i<j) head++; else i--; while(insert(dp2,tail,seq[j])!=1) { j--; if(i>=j) break; } if(i>j) break; else if(i<j) tail++; else j++; } if(dp1[head]>dp2[tail]) { if(head>tail) printf("%d\n",tail*2+1); else printf("%d\n",head*2-1); } else if(dp1[head]==dp2[tail]) { if(head>=tail) printf("%d\n",tail*2-1); else printf("%d\n",head*2-1); } else { if(head>=tail) printf("%d\n",tail*2-1); else printf("%d\n",head*2+1); } } return 0; }
相关文章推荐
- oc基础第四天-继承
- Cocos2d-x 2.0 TestCpp框架源码分析
- m进制转10进制
- 设计模式学习之---模板方法设计模式
- 输出所有“水仙花数”
- ContextMenu上下文菜单
- 设计模式----代理模式
- MyEclipse 10 部署项目时报错,抛出java.lang.NullPointerException异常的解决方法
- Non-resolvable parent POM ['parent.relativePath]
- oc基础第三天-类方法、封装
- Python学习笔记
- ARC的概念和分类的概念
- HDU 1754 I Hate It 线段树
- jquery的post提交---$.post
- Android应用开发之所有动画使用详解
- SQL SERVER 2008 无法附加数据库的解决方法
- Linux 利用管道父子进程间传递数据
- Windows远程桌面技术和SPICE协议概述
- 如何查询注册表的值及 Powershell 应用
- 1044. Shopping in Mars (25)