zoukankan      html  css  js  c++  java
  • 淘宝的推荐系统 计算之道2A

    小明刚刚入职淘宝,老大给他交代了一个简单的任务,实现一个简易的商品推荐系统。

    这个商品推荐系统的需求如下:

       一共有 n 件商品可以被推荐,他们的编号分别为 1 到 n。每件商品都有一个价格,编号为 i的商品价格为 pi 元。

    现在需要给用户推荐尽可能多的商品,但是要保证按照编号上升的顺序给用户依次推荐商品,并且,相邻商品

    的价格之差的绝对值不能超过 d。注意,第一个推荐的商品价格没有限制。

    输入格式

    输出格式

    对于每组数据,输出一行一个整数,表示最多能推荐的商品个数。

    样例输入

    2
    6 3
    5 7 3 6 10 9
    8 6
    4 7 9 5 8 1 9 10

    样例输出

    4
    7
    思路:采取动态规划的思想,dp[i]表最后一个商品为第i件的最大数量,m[i]表示当最后一个商品价格为i的最大数量,对于每个d[i],
    扫描出现过的max(1,a[i]-d)到min(a[i]+d,100000)区间,
    代码如下:

    int getnum(int l,int r,int num)
    {
    int ans=0;
    for(int i=l;i<=r;i++)
    {
    ans=max(ans,m[i]);
    }
    return ans;
    }
    int main()
    {
    int t;
    cin>>t;
    while(t--)
    {
    cin>>n>>d;
    memset(a,0,sizeof(a));
    memset(m,0,sizeof(m));
    for(int i=1;i<=n;i++)
    {
    cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
    int num=getnum(max(1,a[i]-d),min(a[i]+d,100000),a[i]);
    dp[i]=num+1;
    m[a[i]]=max(m[a[i]],dp[i]);
    }
    int ans=1;
    for(int i=1;i<=n;i++)
    {
    ans=max(ans,dp[i]);
    }
    cout<<ans<<endl;
    }
    return 0;
    }

  • 相关阅读:
    简单二分求解(木板补漏问题)
    switch语句和for循环
    JAVA运算符和优先级
    JAVA数据类型
    JAVA基础
    JAVA开发环境
    linux配置IP地址
    LVM逻辑分区
    用户和用户组
    第一天
  • 原文地址:https://www.cnblogs.com/pengpenggege/p/9036406.html
Copyright © 2011-2022 走看看