hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)

题意:

  求解最大递增子序列。

  例如:3 1 3 2

  输入 3  个数 1 3 2

  则递增子序列有 {1} {3} {2} {1 3} {1 2} ,故输出子序列的最大和 4

解题思路:

  x[n](n个数) 数组存储 输入的数据

  dp[i] 用来记录 前 i+1 {数据从下标为0开始存储}个数的 最大结果

  遍历dp[] 找到最大值即可。

因 G20 网站暂停提交

明天测试代码。

2016.08.27 代码提交成功!

代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int x[100002];
 4 int dp[100002];
 5 int main()
 6 {
 7     int n;
 8     while(scanf("%d",&n)!=EOF&&n)
 9     {
10         int i,j,maxx=0;
11         for(i=0; i<n; i++)
12         {
13             scanf("%d",&x[i]);
14         }
15         memset(dp,0,sizeof(dp));
16         dp[0]=x[0];
17         for(i=1; i<n; i++)
18         {
19             for(j=0; j<i; j++)
20             {
21                 if(x[i]>x[j])
22                     dp[i]=max(dp[j],dp[j]+x[i]);
23             }
24             dp[i]=max(dp[i],x[i]);
25             maxx=max(dp[i],maxx);
26         }
27         printf("%d\n",maxx);
28     }
29     return 0;
30 }

 

posted @ 2016-08-26 22:52  马丁黄瓜啊  阅读(129)  评论(0编辑  收藏  举报