侧边栏

HDU-1087 Super Jumping! Jumping! Jumping!

链接http://acm.hdu.edu.cn/showproblem.php?pid=1087

题意:一个长度为n的序列,你可以从一个数字跳到下一个比他大的数字上,不能往回跳,总得分就是你跳到的这些数字的总和,问你最大能得到多少分

思路:最大上升子序列,连续写了好几篇了

代码

 1 #include<bits/stdc++.h>
 2 #define inf 0x3f3f3f3f
 3 using namespace std;
 4 
 5 typedef long long ll;
 6 typedef long double ld;
 7 
 8 const int M = int(1e5)*2 + 5;
 9 const int mod = 10056;
10 
11 inline int lowbit(int x) {
12     return x & (-x);
13 }
14 
15 int a[M];
16 int dp[M];
17 int main(){
18     int n;
19     while(cin>>n && n){
20         memset(a,0,sizeof(a));
21         memset(dp,0,sizeof(dp));
22         for(int i=0;i<n;i++) cin>>a[i];
23 
24         dp[0]=a[0];
25         for(int i=1;i<n;i++){
26             for(int j=0;j<i;j++){
27                 if(a[j]<a[i]){
28                     dp[i]=max(dp[i],dp[j]);
29                 }
30             }
31             dp[i]+=a[i];
32         }
33 
34         int maxn=0;
35         for(int i=0;i<n;i++){
36             maxn=max(maxn,dp[i]);
37         }
38         cout<<maxn<<endl;
39     }
40     return 0;
41 }

备注

posted @ 2019-08-02 12:31  晴人  阅读(142)  评论(0编辑  收藏  举报