最大递增子序列和
南京理工大学2023年机试题
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
输入输出格式
输入描述:
输入包含多组测试数据。 每组测试数据由两行组成。第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000(可能重复)。
输出描述:
对于每组测试数据,输出其最大上升子序列和。
输入输出样例
输入样例#:
7 1 7 3 5 9 4 8
输出样例#:
18
解题方法
思路
dp[i]代表以v[i]为结尾的最大上升子序列和
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,maxSum;
while(cin>>n) {
maxSum=1;
vector<int> v(n);
for(int i=0; i<n; i++) {
cin>>v[i];
v.push_back(v[i]);
}
vector<int> dp(n,1);//初始化为1
for(int i=1; i<n; i++) {
for(int j=0; j<i; j++) {
if(v[i]>v[j]) {
dp[i] = max(dp[j]+v[i],dp[i]);
//更新最大值
maxSum = max(maxSum,dp[i]);
}
}
}
cout<<maxSum<<endl;
}
return 0;
}