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

 

http://acm.hdu.edu.cn/showproblem.php?pid=1087

 

解题思路:求最长上升子序列和的最大值

 

#include <stdio.h> #define GetMax(a,b) a>b?a:b #define Big __int64 Big dp[1005]={0}; int main() { Big Max; int i,j,n,val[1005]={0}; while (scanf("%d",&n),n) { for(i=1;i<=n;i++) scanf("%d",&val[i]),dp[i] = 0; dp[1] = val[1]; for (i=1;i<=n;i++) { for (j=i+1;j<=n;j++) { if (val[j]>val[i]) dp[j] = GetMax(dp[j],dp[i]+val[j]); else if(dp[j]==0)/*之前没有比它小的数,则最大和为自己本身*/ dp[j] = val[j]; } } Max = -1; for (i=n;i>=0;i--) if(Max<dp[i]) Max = dp[i]; printf("%I64d/n",Max); } return 0; }

你可能感兴趣的:(hdu 1087 Super Jumping! Jumping! Jumping!(动态规划))