动态规划(4)

Super Jumping! Jumping! Jumping!


#include<iostream>
#include<iomanip>
#include<string.h>
#include<stdio.h>
using namespace std;
//动态规划,计算每个位置的最大升序不连续序列和。
//睇了很久想了很久才想明白,还要感谢网友的代码,要不是看了很多网友的代码才真正理清楚。
//动态规划真的很神奇,师兄说得对,即使做完那46题DP才是刚入门,继续努力。
int main( )
{
   long long a[1010],b[1010],c,max;//a数组储存数字,b数组储存当前位置的最大升序不连续序列和
   int N,i,j;
   while(cin>>N,N!=0)
   {
       memset(a,0,sizeof(a));
       memset(b,0,sizeof(b));//初始化数组a,b。
       for(i=1;i<=N;++i)
       {
           cin>>a[i];
       }
       max=0;//最大的升序不连续序列的和。
       for(i=1;i<=N;++i)
        {
           c=0;//当前位置前面的最大升序不连续序列的和。
          for(j=1;j<i;++j)
           {
                if(b[j]>c&&a[j]<a[i])
                {
                   c=b[j];
                }
           }
           b[i]=a[i]+c;//当前位置的最大升序不连续序列的和。
           if(b[i]>max)
           max=b[i];//找出最大值。
        }
        cout<<max<<endl;
   }
   return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值