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 }