动态规划:最长上升子序列之基础(经典算法 n^2)
来源:互联网 发布:p2p网管软件 编辑:程序博客网 时间:2024/04/28 21:07
解题心得:
1、注意动态转移方程式,d[j]+1>d[i]>?d[i]=d[j]+1:d[i]
2、动态规划的基本思想:将大的问题化为小的,再逐步扩大得到答案,但是小问题的基本性质要和大的问题相同。
3、这是动态规划的经典方程式,但是耗时较多,在数据较大的时候会出现超时的情况。
题目:
1180: 最长上升子序列之基础
Time Limit: 1000 MS Memory Limit: 65536 KB
Total Submit: 166 Accepted: 79 Page View: 551
Submit Status Discuss
Description
给出一个由n个数组成的序列x[1..n],找出它的最长单调上升子序列的长度。即找出最大的长度m和a1,
a2……,am,使得 a1 < a2 < … … < am 且 x[a1] < x[a2] < … … < x[am]。
Input
先输入一个整数t(t<=200),代表测试组数。
每组数据先输入一个N,代表有N个数(1<=N<=1000).
输入N个正整数,a1,a2,a3…..an(0<=ai<=100000).
Output
每组输出一个整数,代表最长的长度。
Sample Input
1
7
1 7 3 5 9 4 4
8
Sample Output
4
#include<stdio.h>int main(){ int t,n,num[1010]; int len; //记录最长的子序列 int d[1010]; //记录从1开始到n的子序列长度 scanf("%d",&t); while(t--) { len = 0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&num[i]); } for(int i=0;i<n;i++) { d[i] = 1; for(int j=0;j<i;j++) { if(num[i] > num[j] && d[j] + 1 > d[i])//关键:判断上升则第i个肯定比第i之前的更大,d【i】则为之前的+1中的最大的那个 { d[i] = d[j] +1; if(d[i] > len) len = d[i]; } } } printf("%d\n",len); }}
0 0
- 动态规划:最长上升子序列之基础(经典算法 n^2)
- 经典动态规划之最长上升子序列
- 动态规划2-最长上升子序列(算法基础 第5周)
- 【算法】动态规划 最长上升子序列
- C++动态规划算法之最长上升子序列
- 算法学习之动态规划--最长上升子序列
- 动态规划之最长上升子序列
- 【动态规划】 之 最长上升子序列
- 动态规划:最长上升子序列(二分算法 nlogn)
- 动态规划(DP)之最长上升子序列
- 动态规划(DP)之最长上升子序列问题
- 动态规划(最长上升子序列)
- 最长上升子序列(动态规划)
- 最长上升子序列(动态规划)
- 最长上升子序列(动态规划)
- 动态规划--最长上升子序列问题(LIS) O(n^2) ,O(nlogn)
- 动态规划---最长上升子序列问题(O(nlogn),O(n^2))
- YTU OJ 3135: 动态规划基础题目之最长上升子序列(Java解题)
- JBoss/Wildfly 配置SQLserver服务器
- 【2-5】Python基础——dict和set
- uva 12504 Updating a Dictionary(更新字典)
- 进程间通信之WM_COPYDATA的基本实现
- Java泛型:通配符
- 动态规划:最长上升子序列之基础(经典算法 n^2)
- ext4 设备文件处理
- caffe学习笔记19-batchsize参数
- FRAGMENT
- 怎么使用pipenv管理你的python项目
- Main函数为什么要static
- mybatis自动识别数据库关键字
- Install Xen in a Ubuntu(14.04) server
- hbase启动后,HRegionServer进程不存在解决方法