poj2533
2016-03-07 15:17
471 查看
设计算法:dp+LIS
题目大意给定一个序列A={a1,a2,…,an},现在要求出A的一个最长上升子序列的长度
代码如下:
题目大意给定一个序列A={a1,a2,…,an},现在要求出A的一个最长上升子序列的长度
代码如下:
import java.util.Scanner; public class Main_2533 { static int n;//序列的长度 static int[] a;//a[i]:序列的第i个值 static int[] dp;//dp[i]:以a[i]结尾的序最长子序列的长度 public static void main(String[] args) { Scanner in=new Scanner(System.in); n=in.nextInt(); a=new int[n+1]; dp=new int[n+1]; b=new int[n+1]; for(int i=1;i<=n;i++){ a[i]=in.nextInt(); } dp2(); } //AC static void dp() { dp[1]=1; int max=1; for(int i=2;i<=n;i++) { dp[i]=1; for(int j=1;j<i;j++) { if(a[i]>a[j]) { if(dp[i]<dp[j]+1) { dp[i]=dp[j]+1; } } } if(dp[i]>max) { max=dp[i]; } } System.out.println(max); } //AC static int[] b; static void dp2() { b[1]=a[1]; int m=1; for(int i=2;i<=n;i++){ if(a[i]>b[m]) { m++; b[m]=a[i]; }else { int j=m-1; while(a[i]<=b[j]) { j--; } //b[i]<a[i]<=b[j+1]; b[j+1]=a[i]; } } System.out.println(m); } }
相关文章推荐
- 【Jmeter】Jmeter聚合报告分析
- git常用命令
- ECS Linux服务器安装JDK配置JAVA环境
- 消息队列MQ】各类MQ比较
- C++文件操作详解(ifstream、ofstream、fstream)
- Python基础学习教程-第2讲安装Python
- NFS mount
- wamp环境项目连接虚拟机mongo出现连接失败,原因是防火墙端口没开
- 【c/c++】单链表、头指针、头结点、首元节点
- 华中科技1199
- 两个Integer ==和!=的比较,为什么失效?
- IOS-Touch ID的简单使用
- K2BPM怎么让金融数据更有意义?
- 图表 示例代码 ,各种基础示例代码
- “T”必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法
- [leetcode] 11. Container With Most Water
- SQLSERVER实现更改表名,更改列名,更改约束代码
- eclipse导入github上面的工程
- git库服务器更改IP后设置
- Java多线程学习(七)