题目:
厂里进一批新箱子共n个(n<=500),箱子用来装不同的器件。用一个正整数ai(1<=ai<=10000) (1<=i<=n)来表示每个箱子的高度。
现在要从前往后选出m个箱子运到厂房用,因为厂房里的货物一个比一个大,所以这m个箱子要保证后面一个比前面一个高,
也就是对任意的i < j 有 ai < aj. 那么m最大可以是多少呢?
核心思路:
找到状态转移方程,该题为count[i] = max(count[i], count[j] + 1)
如果大于前面的某一位置的数,则当前位置的最大个数为当前值或前面这个位置的最大个数+1
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int number;
cin>>number;
vector<int> data(number);
for(int i = 0; i < number; i++){
int tmp;
cin>>tmp;
data[i] = tmp;
}
int res = 1;
vector<int> count(number, 1);
for(int i = 1; i < number; i++){
for(int j = 0; j < i; j++){
if(data[i] > data[j]){
count[i] = max(count[i], count[j] + 1);
res = max(res, count[i]);
}
}
}
cout<<res;
return 0;
}