UVA 11456 - Trainsorting(LIS)
2014-10-13 21:35
253 查看
这个题 自己想了好长时间。 但是由于没有找到这个问题的本质 所以一直没想好的办法来。。
最主要的还是没有想到是从某一辆列车开始的 后面列车的最大 递增序列长度 和最大递减序列长度。
因为 后面的序列 递增最大的 倒序放前面 就是递减。 而递减的接着跟上就好了。
o(n*n)的算法
最主要的还是没有想到是从某一辆列车开始的 后面列车的最大 递增序列长度 和最大递减序列长度。
因为 后面的序列 递增最大的 倒序放前面 就是递减。 而递减的接着跟上就好了。
o(n*n)的算法
#include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <string> #include <map> #include <vector> #include <set> #include <queue> #include <stack> #include <cctype> using namespace std; typedef long long ll; typedef unsigned long long ull; #define maxn 10000+10 #define INF 1<<30 int main (){ int t; scanf("%d",&t); while(t--){ int n; int num[maxn] = {0},up[maxn] = {0},down[maxn] = {0}; scanf("%d",&n); if(n == 0){ printf("0\n"); continue; } for(int i = 0; i < n; i++){ scanf("%d",&num[i]); up[i] = down[i] = 1; } for(int i = n-2; i >= 0; i--){ for(int j = i+1; j < n; j++){ if(num[i] < num[j]) up[i] = max(up[j]+1,up[i]); if(num[i] > num[j]) down[i] = max(down[j]+1,down[i]); } } int ans = 1; for(int i = 0; i < n; i++){ // printf("%d %d %d\n",num[i],up[i],down[i]); ans = max(ans,up[i]+down[i]-1); } printf("%d\n",ans); } return 0; }
相关文章推荐
- uva 11456 - Trainsorting(LIS)
- uva 11456 - Trainsorting(dp,LIS)
- uva11456——Trainsorting(LIS)
- UVA 11456 - Trainsorting(DP + LIS)
- 【UVa】11456 - Trainsorting
- UVa 11456 - Trainsorting
- UVa 11456 - Trainsorting
- UVA11456--dp,LIS
- Uva 11456 - Trainsorting
- UVa 10534 Wavio Sequence (LIS+暴力)
- UVa 10534 - Wavio Sequence LIS
- Prince and Princess UVA - 10635(LCS转LIS)
- UVA - 10635 Prince and Princess LCS转LIS
- UVa 10051 Tower of Cubes(类似LIS)
- UVA 10534 Wavio Sequence LIS(nlogn实现)
- UVa1471 LIS变种 nlgn
- UVA10534-----Wavio Sequence-----动态规划之LIS
- UVa 10534 - Wavio Sequence LIS
- UVA 10534 Wavio Sequence(dp + LIS)
- uva_10534_Wavio Sequence( LIS )