滴,集训第十二天打卡。
这两天是DP,划水了一天的简单题,嘻嘻。
HDU 1087 Super Jumping! Jumping! Jumping!
题目大意:输入N,然后N个数的数组,求最大递增子序列的和。
思路:DP,i用来遍历数组,j用来计算0-i的最大值。
状态方程:sum[i]=max{sum[j]}+a[i];
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
int a[1005],sum[1001];
int main()//E
{
int n,i,j,max,s;
while(scanf("%d",&n))
{
if(n==0)break;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=-9999;
memset(sum,0,sizeof(sum));
for(i=0;i<n;i++)
{
s=0;
for(j=0;j<i;j++)
{
if(a[j]<a[i])
{
if(s<sum[j])
s=sum[j];
}
}
sum[i]=a[i]+s;
if(max<sum[i])
max= sum[i];
}
printf("%d\n",max);
}
}


2151

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



