首页 > 其他 > 详细

hdu1087 dp

时间:2015-10-26 08:08:48      阅读:241      评论:0      收藏:0      [点我收藏+]

题意:给定一串数字,要求选取一个严格递增的子序列,使序列和最大。

dp[i] 表示以 i 为结尾的子序列的最大和,dp[i] = max{dp[j]+a[i]}(j 从 0 到 i-1),dp[0]是0;

技术分享
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define max(a,b) a>b?a:b
 4 
 5 int a[1002];
 6 long long dp[1002];
 7 
 8 int main(){
 9     int n;
10     while(scanf("%d",&n)!=EOF&&n!=0){
11         int q,i,j;
12         long long m=0;
13         for(q=1;q<=n;q++){
14             scanf("%d",&a[q]);
15             dp[q]=a[q];
16             for(i=1;i<q;i++){
17                 if(a[i]<a[q]){
18                     dp[q]=max(dp[q],dp[i]+a[q]);
19                 }
20             }
21             m=max(m,dp[q]);
22         }
23         printf("%I64d\n",m);
24     }
25     return 0;
26 }
View Code

 

hdu1087 dp

原文:http://www.cnblogs.com/cenariusxz/p/4910185.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!