题目描述
Redraiment是走梅花桩的高手。Redraiment可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。他希望走的步数最多,你能替Redraiment研究他最多走的步数吗?
参考leetcode最长递增子序列
动态规划:dp数组保存每部最优解
dp[i]=max(dp[i],dp[j]+1) 且j属于[0,i)
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
vector<int> dp(nums.size(),1);
int ans=1;
for(int i=0;i<nums.size();i++)
{
for(int j=0;j<i;j++)
{
if(nums[j]<nums[i])
{
dp[i]=max(dp[i],dp[j]+1);
if(dp[i]>ans) ans=dp[i];
}
}
}
return ans;
}
};所以加上输入输出后:
#include<iostream>
using namespace std;
int max(int a,int b){
return a>b?a:b;
}
int main(){
int num;
while(cin>>num){
int input[num];
for(int i=0;i<num;i++)
cin>>input[i];
int dp[num];int ans=1;
for(int i=0;i<num;i++)
{
dp[i]=1;
for(int j=0;j<i;j++)
{
if(input[j]<input[i])
{
dp[i]=max(dp[j]+1,dp[i]);
if(dp[i]>ans) ans=dp[i];
}
}
}
cout<<ans<<endl;
}
}
京公网安备 11010502036488号