您的位置:首页 > 其它

HDOJ 1087 Super Jumping! Jumping! Jumping!

2009-02-26 21:13 369 查看
经典DP例题:HDU 1087 Super Jumping! Jumping! Jumping!
http://acm.hdu.edu.cn/showproblem.php?pid=1087
这道理的题意是给一个序列要你求它的最大上升序列(可跳)不用连续
如序列:1 4 7 3 5 6 那么开另一个数组来保存同下标的“最大值”,每一个都要向前找合法的最大b值,如这里的5可以找的合法值为3 4 1,找到最大后便加上同下标的a值,如:
数组a:1 4 7 3 5 6
数组b:1 5 12 4 10 16 à这样找到B中的最大值就OK了!

#include <iostream>
using namespace std;
int main()
{
int i,j,k,l,n,m,t;
int a[1002],b[1002] = {0};
while (scanf("%d",&n)!=EOF && n)
{
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//即求A中的最大上序列
//1 4 3 2 5 6
memset(b,0,sizeof(b));
int sum = 0;
k=0;
int maxnum = -1;
for (i=0;i<n;i++)
{
b[i] = a[i];
int maxb = 0;
for (j=0;j<i;j++)	//找比自己小的里面b最大的
{
if (a[i] > a[j])
{
if (b[j] > maxb)
{
maxb = b[j];
}
}
}
b[i] += maxb;
if (b[i] > maxnum)
{
maxnum = b[i];
}
}
printf("%d/n",maxnum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: