您的位置:首页 > 大数据 > 人工智能

【UVa】11456 - Trainsorting

2016-04-07 23:26 417 查看
Problem here

Problem

Erin is an engineer. She drives trains. She also arranges the cars within each train. She prefers to

put the cars in decreasing order of weight, with the heaviest car at the front of the train.

Unfortunately, sorting train cars is not easy. One cannot simply pick up a car and place it somewhere

else. It is impractical to insert a car within an existing train. A car may only be added to the beginning

and end of the train.

Cars arrive at the train station in a predetermined order. When each car arrives, Erin can add it

to the beginning or end of her train, or refuse to add it at all. The resulting train should be as long as

possible, but the cars within it must be ordered by weight.

Given the weights of the cars in the order in which they arrive, what is the longest train that Erin

can make?

INPUT

The first line is the number of test cases to follow. The test cases follow, one after another; the format

of each test case is the following:

The first line contains an integer 0 ≤ n ≤ 2000, the number of cars. Each of the following n lines

contains a non-negative integer giving the weight of a car. No two cars have the same weight.

OUTPUT

Output a single integer giving the number of cars in the longest train that can be made with the given

restrictions.

SAMPLE

input

1

3

1

2

3

output

3

Solution

LIS + LDS -1

這裡-1因為LIS和LDS的起點會重複

#include <iostream>
#include <vector>
#include "memory.h"
using namespace std;

int train[2000];
int len[2000];
int len2[2000];
int tn;

int main(){
int t;
while(cin >> t){
while(t--){
cin >> tn;
for(int i = tn-1; i >= 0; i--){
len[i] = 1;
len2[i] = 1;
int tmp;
cin >> tmp;
train[i] = tmp;
}
for(int i = 0; i < tn; i++){
for(int j = i+1; j < tn; j++){
if(train[i] < train[j]){
len[j] = max(len[j], len[i]+1);
}
if(train[i] > train[j]){
len2[j] = max(len2[j], len2[i]+1);
}
}
}
int result = 0;
for(int i = 0; i < tn; i++){
result = max(result, len[i]+len2[i]-1);
}
cout << result << endl;
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva 算法