回文序列-2017网易校园招聘
来源:互联网 发布:淘宝小二电话人工 编辑:程序博客网 时间:2024/05/01 23:06
[编程题] 回文序列
如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
现在给出一个数字序列,允许使用一种转换操作:
选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。
现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列。
输入描述:
输入为两行,第一行为序列长度n ( 1 ≤ n ≤ 50)第二行为序列中的n个整数item[i] (1 ≤ iteam[i] ≤ 1000),以空格分隔。
输出描述:
输出一个数,表示最少需要的转换次数
输入例子:
41 1 1 3
输出例子:
2
解题思路:第一直觉:动态规划,关键是寻找状态转移点
// 每一步可能遇到2种状态
// a. 第一个与最后一个相等,则对回文序列没有贡献
// b. 第一个与最后一个不等。为了构造回文序列,使用最小的步数,则两端的数据相差越小越好
// 如果最后一个数据比第一个大,则前两个合并
// 如果第一个数据比最后一个大,则后两个合并
#include <vector>#include <cstdio>using namespace std;int main(){int n, ans = 0,pBegin, pEnd;int vec[50];scanf("%d",&n);pBegin = 0; pEnd = n-1;for(int i = 0; i < n; ++i){scanf("%d",&vec[i]);}while(pBegin <= pEnd){if(vec[pBegin] == vec[pEnd]){++pBegin,--pEnd;}else if(vec[pBegin] < vec[pEnd]){vec[pBegin+1] +=vec[pBegin];++pBegin;++ans;}else{vec[pEnd-1]+=vec[pEnd];--pEnd;++ans;}}printf("%d\n",ans);return 0;}
0 0
- 回文序列-2017网易校园招聘
- 网易2017校园招聘笔试题 回文序列
- 网易2017校园招聘笔试题:回文序列
- 网易2017校园招聘笔试题:回文序列
- 网易2017校园招聘笔试题 回文序列
- 网易校园招聘2017编程题--回文数问题
- 《校园招聘网易》之操作序列
- 优雅的点-2017网易校园招聘
- 2017网易有道校园招聘笔试题
- 网易2018校园招聘:最长公共子括号序列 [python]
- 校园招聘--网易笔试
- 网易校园招聘笔试题目
- 网易游戏2011校园招聘
- 网易校园招聘笔试题目
- 网易校园招聘dp题
- 2018网易校园招聘 DP
- 2017百度校园招聘编程题 删除字符构造最长回文字符串(求最长公共子序列的变种)
- 网易2017校园招聘数据挖掘笔试题
- CSS3_Node1_选择器&边框&阴影
- 适配器模式与Android中的Adapter
- 复制文件的问题:使用FileInputStream和FileOutputStream实现文件复制
- 文章标题
- 剑指offer(9)-树的子结构
- 回文序列-2017网易校园招聘
- 顺序表-【学生信息管理系统】
- Fast RCNN 训练自己数据集 (1编译配置)
- [ElasticSearch]那些年踩过的ElasticSerch坑
- 操作技巧:将 Spark 中的文本转换为 Parquet 以提升性能
- hadoop2.4.1下整合hbase-0.96和hive-0.14
- YUV2----将YUV420P像素数据去掉颜色(变成灰度图)和亮度减半、四周加边框
- HashMap原理分析
- 括号匹配算法