题意:仿照最长上升子序列求解,以k为终点的最长上升子序列。不过在这里是求最长上升子序列的和,不是长度,所以以和判断大小
#include <stdio.h> #include <iostream> using namespace std; int a[1005],b[1005]; int n; int tmp(int k){ if(b[k]!=0)return b[k]; int t=0; for(int i=0;i<k;i++){//以k为终点的上升序列 if(a[i]<a[k]) t=max(t,tmp(i)); } if(t!=0){ b[k]=t+a[k]; return t+a[k]; }else{ b[k]=a[k]; return a[k]; } return 0; } int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } int t=0; for(int i=0;i<n;i++){ t=max(t,tmp(i)); } cout<<t<<endl; return 0; }