hdu 5256 序列变换(LIS最长上升子序列)
2015-09-11 21:02
246 查看
[align=left]Problem Description[/align]
[align=left]Input[/align]
[align=left]Output[/align]
[align=left]Sample Input[/align]
[align=left]Sample Output[/align]
[align=left]Source[/align]
2015年百度之星程序设计大赛 - 初赛(2)
LIS最长上升子序列裸题
View Code
我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增。其中无论是修改前还是修改后,每个元素都必须是整数。 请输出最少需要修改多少个元素。
[align=left]Input[/align]
第一行输入一个T(1≤T≤10),表示有多少组数据 每一组数据: 第一行输入一个N(1≤N≤105),表示数列的长度 第二行输入N个数A1,A2,...,An。 每一个数列中的元素都是正整数而且不超过106。
[align=left]Output[/align]
对于每组数据,先输出一行
Case #i: 然后输出最少需要修改多少个元素。
[align=left]Sample Input[/align]
2 2 1 10 3 2 5 4
[align=left]Sample Output[/align]
Case #1: 0 Case #2: 1
[align=left]Source[/align]
2015年百度之星程序设计大赛 - 初赛(2)
LIS最长上升子序列裸题
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> #include<cmath> using namespace std; int n; int a[100006]; int b[100006]; int LIS() { int cnt=0; for(int i=0;i<n;i++) { int t=upper_bound(b,b+cnt,a[i])-b; b[t]=a[i]; if(t==cnt) cnt++; } return cnt; } int main() { int t; int ac=0; scanf("%d",&t); while(t--) { scanf("%d",&n); int m=0; for(int i=1;i<=n;i++) { int x; scanf("%d",&x); a[m++]=x-i; } printf("Case #%d:\n",++ac); printf("%d\n",n-LIS()); } return 0; }
View Code
相关文章推荐
- (4.1.35.1) android处理crash程序崩溃异常
- Poj1129
- 求一段字符串中连续出现次数最多的单个字符和分解字符串
- Extjs学习笔记 vtype
- Leet Code Medium 16 3Sum Closest
- python解决sql注入以及特殊字符
- 按天分割备份Catalina.out
- JAVA
- Java 7 在 WebSphere Application Server V8.5 中的安装配置和版本切换
- SQLite 支持的数据类型
- PAT 1097. Deduplication on a Linked List (25)
- LeetCode(62)Unique Paths
- Leet Code Medium 15 3Sum
- 坚持的
- 达到HTTP合约Get、Post和文件上传功能——采用WinHttp介面
- LibSvm的使用
- LeetCode(62)Unique Paths
- Linux中修改环境变量及生效方法
- uva 1116 - Puzzle(贪心)
- 【Linux学习】epoll详解