逢低吸纳_DP

逢低吸纳

                         来源: USACO 4-3-1

 

【问题描述】

 

    “逢低吸纳”是炒股的一条成功秘诀。如果你想成为一个成功的投资者,就要遵守这条秘诀:

 

"逢低吸纳,越低越买"

 

这句话的意思是:每次你购买股票时的股价一定要比你上次购买时的股价低.按照这个规则购买股票的次数越多越好,看看你最多能按这个规则买几次。

 

给定连续的N天中每天的股价。你可以在任何一天购买一次股票,但是购买时的股价一定要比你上次购买时的股价低。写一个程序,求出最多能买几次股票。

 

以下面这个表为例, 某几天的股价是:

 

天数 1  2 3  4  5 6  7  8 9  10 11 12

股价 68 69 54 6468 64 70 67 78 62 98 87

这个例子中, 聪明的投资者(按上面的定义),如果每次买股票时的股价都比上一次买时低,那么他最多能买4次股票。一种买法如下(可能有其他的买法):

 

天数 2  5 6  10

股价 69 68 64 62

【输入文件】buylow.in

 

第1行: N (1 <= N <= 5000), 表示能买股票的天数。

 

第2行以下: N个正整数 (可能分多行) ,第i个正整数表示第i天的股价. 这些正整数大小不会超过longint(pascal)/long(c++).

 

 

 

【输出文件】buylow.out

 

只有一行,输出两个整数:

 

能够买进股票的天数长度达到这个值的股票购买方案数量

 

在计算解的数量的时候,如果两个解所组成的字符串相同,那么这样的两个解被认为是相同的(只能算做一个解)。因此,两个不同的购买方案可能产生同一个字符串,这样只能计算一次。

 

 

 

【输入样例】

 

12

68 69 54 64 68 64 70 67

78 62 98 87

【输出样例】

 

4 2

#include 
   
   
    
    

int dp[5001],f[5001];

int a[5001];

int main()
{
       int n;

       scanf("%d",&n);

       int i;

       for(i=1;i<=n;i++)
       {
              scanf("%d",&a[i]);
              dp[i]=1;
              f[i]=0;
       }

       int max=0;

       int m;

       int j;

       for(i=2;i<=n;i++)
       {
              for(j=i-1;j>=1;j--)
              {
                     if(a[j]>a[i]&&dp[i]
    
    
     
     a[i])
          {
                        f[i]=f[i]+f[j];
          }
              }
              if(f[i]==0)
              {
                     f[i]=1;
              }
       }

       printf("%d%d\n",max,f[m]);

       return0;

}

    
    
   
   

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>