HDU-1087(最长递增序列)

来源:互联网 发布:成龙人品知乎 编辑:程序博客网 时间:2024/06/14 02:15

其实一开始就有思路的,但是,我一看,算法是两重循环..虽然不超时,觉得还是不好,觉得DP应该不会这样吧...

别了我很长时间,最后还是想去试试吧,,试了一试,还真是这么算..晕了.

贴出代码:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int a[1005];int dp[1005];int max(int a,int b){return a>=b?a:b;}int main(){int N;while(scanf("%d",&N),N){a[0]=0;dp[0]=0;for(int i=1;i<=N;i++)scanf("%d",a+i);dp[1]=a[1];int maxi=0;for(i=2;i<=N;i++){int t=0;for(int j=i-1;j>=1;j--){if(a[i]>a[j])t=max(dp[j],t);}dp[i]=t+a[i];if(maxi<dp[i])maxi=dp[i];}printf("%d\n",maxi);}return 0;}