您的位置:首页 > 其它

jobdu 1480 最大上升子序列和结题报告 动态规划问题

2014-02-22 16:23 435 查看
题目链接:http://ac.jobdu.com/problem.php?pid=1480

动态规划问题,最主要的就是搞清楚递推的关系,在此定义节点的两个参数 data=值,max=以该数结尾的最大子序列和。对每个数依次向前搜索确定该数的max值。具体方法参看代码。

#include <stdio.h>

typedef struct{
int data;
int max; //到该数为止的最大子序列和
}nodetype;

int main(){
nodetype num[1001];
int m;
int max;
int maxtemp;
while(scanf("%d",&m)!=EOF){
for(int i=0;i<m;i++){
scanf("%d", &num[i].data);
num[i].max=num[i].data;
}

for(int i=1;i<m;i++){
maxtemp=num[i].max;
for(int j=i-1;j>=0;j--){
if(num[j].data<num[i].data){
if((num[i].max+num[j].max)> maxtemp){
maxtemp=num[i].max+num[j].max;
}
}
}
num[i].max=maxtemp;
}

max=num[0].max;
for(int i=0;i<m;i++){
if(num[i].max>max)
max=num[i].max;
}
printf("%d\n", max);
}
return 0;
}


欢迎关注微信公众号,一起学习!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: