九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:118
解决:54
- 题目描述:
-
给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列。
- 输入:
-
输入的第一行包括一个整数N(1<=N<=10000)。
接下来的一行是N个满足题目描述条件的整数。
- 输出:
-
可能有多组测试数据,对于每组数据,
输出去掉最少的元素后的全递增序列。
- 样例输入:
-
8
186 186 150 200 160 130 197 220
- 样例输出:
-
150 160 197 220
- 提示:
-
如果有多个结果序列满足条件,输出相对位置靠前的那个序列。
思路:
此题并不是求最长递增序列这么简单,这句话才是本题难点所在:
如果有多个结果序列满足条件,输出相对位置靠前的那个序列。
本人第一遍一直在想各种方式保存状态,达到目的,却一直各种错误。
后来放弃了在原有的代码上修改,重写了一遍,AC了。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h> #define N 10000 typedef struct node {
int id;
int mNum;
struct node *next;
} Post; int n;
int a[N+1];
int mLen;
Post *p[N+1]; Post *insert(Post *t, int id)
{
Post *h = (Post *)malloc(sizeof(Post));
h->id = id;
h->next = t;
h->mNum = a[id];
if (!t)
mLen ++;
else if (t->mNum > h->mNum)
h->mNum = t->mNum;
return h;
} int main(void)
{
int i, j; while (scanf("%d", &n) != EOF)
{
for(i=0; i<n; i++)
scanf("%d", &a[i]);
memset(p, 0, sizeof(p));
mLen = 0; for (i=n-1; i>=0; i--)
{
for (j=mLen; j>0; j--)
{
Post *t = p[j];
if (t && t->mNum > a[i])
{
while (t)
{
if (a[t->id] > a[i])
break;
}
p[j+1] = insert(p[j+1], i);
break;
}
}
if (j == 0)
p[1] = insert(p[1], i);
} int step = mLen;
Post *t = p[step];
int id = t->id;
printf("%d", a[id]);
step --;
while (step)
{
t = p[step];
while (t->id <= id)
t = t->next;
id = t->id;
printf(" %d", a[id]);
step --;
}
printf("\n");
} return 0;
}
/**************************************************************
Problem: 1262
User: liangrx06
Language: C
Result: Accepted
Time:20 ms
Memory:1824 kb
****************************************************************/
九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)的更多相关文章
- 九度oj 题目1262:Sequence Construction puzzles(I)_构造全递增序列
题目描述: 给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列. 输入: 输入的第一行包括一个整数N(1<=N<=10000). 接下来的一行是N个满足题目描述条件的整 ...
- 九度oj 题目1354:和为S的连续正数序列
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...
- 【九度OJ】题目1442:A sequence of numbers 解题报告
[九度OJ]题目1442:A sequence of numbers 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1442 ...
- 【九度OJ】题目1144:Freckles 解题报告
[九度OJ]题目1144:Freckles 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1144 题目描述: In an ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...
随机推荐
- Vue表单和组件
一.表单 v-model 指令在表单控件元素上创建双向数据绑定,v-model 会根据控件类型自动选取正确的方法来更新元素. <input v-model="message" ...
- Python 面向对象二(转载)
来源:www.cnblogs.com/wupeiqi/p/4766801.html 三.类成员的修饰符 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 1.公有成员, ...
- iOS 执行时
一.什么是执行时(Runtime)? 执行时是苹果提供的纯C语言的开发库(执行时是开发中经经常使用到的底层技术) 二.执行时的作用? 能获得某个类的全部成员变量 能获得某个类的全部属性 能获得某个类的 ...
- Linux学习之二-Linux系统的目录结构
Linux学习之二-Linux系统的目录结构 在Linux的根目录下,有很多的目录,但是需要记住,对于Linux而言,一切皆文件.因此此处的目录也是文件.用ls / 命令就能看到根目录下的各类不同的目 ...
- 转:大数据 2016 landscape
如图:
- C++基础学习教程(一)
開始自己的C++复习进阶之路. 声明: 这次写的博文纯当是一个回想复习的教程.一些非常基础的知识将不再出现.或者一掠而过,这次的主要风格就是演示样例代码非常多~~~ 全部代码在Ubuntu 14.04 ...
- phpcms前台任意代码执行漏洞(php<5.3)
phpcms v9 中 string2array()函数使用了eval函数,在多个地方可能造成代码执行漏洞 /phpsso_server/phpcms/libs/functions/global.fu ...
- Web用户的身份验证及WebApi权限验证流程的设计和实现(尾)
5. WebApi 服务端代码示例 5.1 控制器基类ApiControllerBase [csharp] view plaincopy /// /// Controller的基类,用于实现适合业 ...
- jenkins插件安装失败更改插件源
看提示的日志说是下载失败,应该是网络问题 最好的办法就是更改下载源 [系统管理][管理插件][高级]升级站点项的的地址修改成 修改之后,安装了一下git的插件速度非常快,jenkins镜像地址列表ht ...
- php 记录图片浏览次数次数
<?php $url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; $la ...