题目大意:跳格子,约束条件是,下一步格子的数比上一步格子的数要大。
解题思路:典型的最长有序子序列,并记录各个序列的sum,输出最大的sum;
/*hdu1087*/
#include <stdio.h>
#define nMax 1024
typedef struct data
{
long n;
long sum;
};
struct data a[nMax];
int main(int argc, char *argv[])
{
int n,i,j;
long max;
while(scanf("%d",&n),n)
{
for(i=0; i<n; i++)
{
scanf("%d",&a[i].n);
a[i].sum=a[i].n;
if(i==0) max=a[0].n;
int tmp=a[i].sum;
for(j=i-1; j>=0; j--)
{
if(a[j].n<a[i].n)
{
if(a[i].sum<tmp+a[j].sum)
a[i].sum=tmp+a[j].sum;
if(max<a[i].sum)
max=a[i].sum;
}
}
}
printf("%ld\n",max);
}
return 0;
}
本文介绍了一种解决最长递增子序列问题的算法实现,该问题要求在给定序列中找到最长递增子序列的同时计算该子序列的元素之和,并输出最大和。文章通过一个具体的代码实例展示了如何使用动态规划的思想来解决这个问题。
1198

被折叠的 条评论
为什么被折叠?



