hdu 1087(最大递增子序列)

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

一开始我把题目理解错了,还以为是必须连续的,orz。。。。

思路:dp[i]表示第i个位置是的最大值,那么状态转移方程即为:dp[i]=dp[i-1]+num[i](num[i]>num[j],i>j);

View Code
 1 #include<iostream>
 2 const int N=1100;
 3 using namespace std;
 4 int dp[N],num[N];
 5 
 6 int main(){
 7     int n;
 8     while(scanf("%d",&n)!=EOF&&n){
 9         for(int i=0;i<n;i++){
10             scanf("%d",&num[i]);
11         }
12         dp[0]=num[0];
13         int ans=0;
14         for(int i=1;i<n;i++){
15             ans=0;
16             for(int j=0;j<i;j++){
17                 if(num[j]<num[i]&&dp[j]>ans){
18                     ans=dp[j];
19                 }
20             }
21             dp[i]=ans+num[i];
22         }
23         ans=0;
24         for(int i=0;i<n;i++){
25             ans=max(dp[i],ans);
26         }
27         printf("%d\n",ans);
28     }
29     return 0;
30 }
原文地址:https://www.cnblogs.com/wally/p/2953414.html