题意
多组输入给定区间, 求递增序列的最大和
题解
首先这个只是递增序列, 不需要连续
这样, dp的时候, 两个状态, 选或者不选, 每次维护一个数的时候, 维护这个数字之前所有数字的最大和数组
代码
#include <bits/stdc++.h>
using namespace std;
#define sc scanf
#define pf printf
typedef long long ll;
const int maxn = 1e3+100;
int dp[maxn],
num[maxn],
n;
int main ( ) {
while ( cin >> n ) {
if ( n==0 ) break;
for ( int i = 0; i < n; i++ ) {
cin >> num[i];
dp[i] = num[i];
}
int max_ans = num[0];
for ( int i = 0; i < n; i++ ) {
for ( int j = i + 1; j < n; j++ ) {
if ( num[j]>num[i] ) {
dp[j] = max ( dp[j], dp[i] + num[j] );
max_ans = max ( max_ans, dp[j] );
}
}
}
cout << max_ans << endl;
}
return 0;
}
// 题意:求递增段最大和