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 }
备注:
————————————————
心里有光,哪儿都美
心里有光,哪儿都美