【最长递增子序列】
dp[i]表示“以i结尾”(指必须取num[i])的最长递增子序列长度,因此结果可以累加到dp[n],直接取dp[n]即可
【最大递增子序列和】
dp[i]表示“从0到i”(可以不取num[i])的最大递增子序列和,各自结果独立,因此需要求max
#include<iostream> #include<math.h> using namespace std; int main(){ int n; int num[1000]; int dp[1000]; while(cin>>n){ for(int i=0;i<n;i++){ cin>>num[i]; } int maxSum = 0; for(int i=0;i<n;i++){ dp[i] = num[i]; for(int j=0;j<i;j++){ if(num[i]>num[j]) dp[i] = max(dp[i],dp[j]+num[i]); } maxSum = max(maxSum,dp[i]); } cout<<maxSum<<endl; } return 0; }