Description
给定长度为n的正整数序列a1,a2,…,an。
令sum=ab1+ab2+…+abm,并且满足:ab1<ab2<…<abm;b1<b2<…<bm;1<=m<=n。
求最大的sum。
n<=1000,0<ai<=109
Input
第一行,n,表示给定序列的个数。
第二行,n个用空格隔开的正整数序列。
Output
最大的sum。
Sample Input
6 2 4 1 20 5 6
Sample Output
26
思路:这道题的思路和最长上升子序列一样,但是需要稍加改动。排序的时候一直没把int改为ll,一直wa,好难过。
#include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> using namespace std; #define ll long long const int inf = 0x3f3f3f3f; const int mod = 1e9+7; int n, num[1000+8]; ll dp[1000+8]; int main() { scanf("%d", &n); for(int i = 0; i<n; i++) { scanf("%d", &num[i]); dp[i] = num[i]; } for(int i = 0; i<n; i++) for(int j = 0; j<i; j++) if(num[i]>num[j] && dp[j]+num[i]>dp[i])dp[i] = dp[j]+num[i]; sort(dp, dp+n, greater<ll>()); printf("%lld ", dp[0]); return 0; }