小颜同学的游戏之旅(二)

故事背景

在提瓦特大陆,小颜同学探索了许多秘密地区,找到了一个神秘的市场,市场上的物品都是具有特殊属性的稀有元素。市场中的元素价格随时间波动,并且每次购买后价格会有所改变。小颜希望通过这个市场的价格波动来进行元素交易,从而增加他的元素收集。

题目描述

小颜在市场中发现了一种可以用来购买特殊元素的策略:“低价购买,再低价购买”,即每次购买价格必须低于上一次购买的价格。他希望在保持这种策略的前提下,尽可能多地购买元素。

现在,小颜手头有一系列记录了某种元素在连续几天内的价格的数据。你的任务是帮助小颜计算出在这些天里,按照“低价购买,再低价购买”的原则,他最多能购买这种元素多少次。

这里是一个示例的元素价格表:

日期元素价格​168​269​354​464​568​664​770​867​978​1062​1198​1287​​

一个优秀的购买策略可以使小颜最多进行4次购买,例如在如下日期和价格进行购买:

日期元素价格​269​568​664​1062​​

输入描述

第一行共一个整数 N (1≤N≤5000),代表记录的天数。
第二行包含 N 个整数,每个整数代表那天的元素价格。所有价格都是不超过 216 的正整数。

输出描述

输出共一行两个整数,分别为最大购买次数和拥有最大购买次数的方案数(数据保证
≤231)。当两种方案价格序列相同时,这两种方案被认为是相同的。

用例输入 1 

12
68 69 54 64 68 64 70 67 78 62 98 87

用例输出 1 

4 2

上代码:

#include<bits/stdc++.h>
using namespace std;
int a[10005],f[10005],t[10005];
int main(){
    int n,a1=1,a2=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        f[i]=t[i]=1;
    }
    for(int i=2;i<=n;i++){
        for(int j=1;j<i;j++){
            if(a[j]>a[i]){
                if(f[i]<f[j]+1)
                {
                    f[i]=f[j]+1;
                    t[i]=t[j];
                }
                    else if(f[i]==f[j]+1)
                    t[i]+=t[j];
            }
            if(a[j]==a[i])
                f[j]=t[j]=0;
        }
        a1=max(a1,f[i]);
    }
    cout<<a1;
    for(int i=1;i<=n;i++)
        if(f[i]==a1)
            a2+=t[i];
    cout<<" "<<a2;
    return 0;
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值