A-Super Jumping!Jumping! Jumping!
最开始题目都读不懂,懂了以后不会做,应该还是没有深入思考,这道题是上升序列,不要求连续,然后算出最大上身序列的和,= =可能直接求出会比较麻烦,所以我们可以比较变计算,这样就使用到了动态规划了。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[1005],dp[1005]; const int inf=9999999; int max(int x,int y) { return x>y?x:y; } int main() { int n,sum; while(cin>>n,n) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { sum=-999; for(int j=0;j<=i;j++) { if(a[i]>a[j]) sum=max(sum,dp[j]); } dp[i]=sum+a[i]; } sum=-999; for(int i=1;i<=n;i++) { if(sum<dp[i]) sum=dp[i]; } cout<<sum<<endl; } return 0; }