九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)
来源:互联网 发布:linux3.0内核源码分析 编辑:程序博客网 时间:2024/06/03 21:43
- 题目描述:
给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列。
- 输入:
输入的第一行包括一个整数N(1<=N<=10000)。
接下来的一行是N个满足题目描述条件的整数。
- 输出:
可能有多组测试数据,对于每组数据,
输出去掉最少的元素后的全递增序列。
- 样例输入:
8186 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****************************************************************/
0 0
- 九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)
- 【九度OJ】题目1262:Sequence Construction puzzles(I)_构造全递增序列
- 九度 题目1262:Sequence Construction puzzles(I)_构造全递增序列
- 题目1262:Sequence Construction puzzles(I)_构造全递增序列
- 题目1262:Sequence Construction puzzles(I)_构造全递增序列
- 九度OJ 1011:最大连续子序列 (DP)
- 九度OJ 1077:最大序列和 (DP)
- 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)
- [ACM] 九度OJ 合唱队形 (最长递增子序列改版)
- 九度OJ-1131:合唱队形(最长递增子序列)
- 九度OJ 1497:面积最大的全1子矩阵(DP)
- 九度OJ 1042:Coincidence(公共子序列) (DP)
- 九度OJ 1112:拦截导弹 (DP、最长下降子序列)
- 九度OJ 1131:合唱队形 (DP、最长上升下降序列)
- 九度oj 和为S的连续正数序列 1354 (机智DP) 好题
- 九度OJ 1337:寻找最长合法括号序列 (DP)
- 九度OJ 1342:寻找最长合法括号序列II (DP)
- UVa 10534 Wavio Sequence (最长递增子序列 DP 二分)
- 重写与重载
- poj 2393
- 策略模式
- lua 入门 helloworld
- Codeforces 598E Chocolate Bar
- 九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)
- 4.2.4 Python特有编码
- this与super
- hdfs之快照的学习
- 第32讲 实践项目——输出小星星4
- 测试准备工作《全程软件测试》
- POJ 2456 Aggressive cows(最小值最大化+二分)
- 九度OJ 1283:第一个只出现一次的字符 (计数)
- 游戏项目中的资源加载管理