zoukankan      html  css  js  c++  java
  • 玩具(toy)

    题目描述

    商店正在出售小C最喜欢的系列玩具,在接下来的n周中,每周会出售其中

    的一款,同一款玩具不会重复出现。 

    由于是小C最喜欢的系列,他希望尽可能多地购买这些玩具,但是同一款玩

    具小C只会购买一个。同时,小C的预算只有m元,因此他无法将每一款都纳入

    囊中。此外,小C不能连续两周都购买玩具,否则他会陷入愧疚。现在小C想知

    道,他最多可以买多少款不同的玩具呢? 

    输入说明

    输入文件共2行; 

    第一行两个正整数n和m,中间用一个空格隔开; 

    第二行共n个正整数,第i个正整数表示第i周出售的玩具的价格。 

    输出说明

    输出文件只有一行,包含一个整数,表示小C最多能买多少款不同的玩具。

    输入输出样例

    样例输入

    3 8 

    4 4 5 

    样例输出

    数据范围

    对于30%的数据,n≤10; 

    对于60%的数据,n≤100,m≤1000; 

    对于100%的数据,n≤1000,m≤1000000,单个玩具的价格≤1000。 

    
    

    这是一道简单题! by sry。

    设$f(i,j)$表示到第$i$个物品且买$j$个的最小花费,简单转移即可。

    时间复杂度 $O(n^2)$。

    但是数据很水所以$O(nm)=O(能过)$

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 int n,m,a[1001],f[1000001],ans,now=1,last=2;
     6 bool pd[1000001][3];
     7 int main()
     8 {
     9     cin>>n>>m;
    10     for(int i=1;i<=n;i++)
    11     {
    12         cin>>a[i];
    13     }
    14     for(int i=1;i<=n;i++)
    15     {
    16         swap(now,last);
    17         for(int j=0;j<=m;j++)pd[j][last]=0;
    18         for(int j=m;j>=a[i];j--)
    19         {   
    20             if(f[j-a[i]]+1>f[j]&&!pd[j-a[i]][now])
    21             {
    22                 f[j]=f[j-a[i]]+1;
    23                 pd[j][last]=1;
    24             }
    25         }
    26     }
    27     cout<<f[m];
    28     return 0;
    29 }
    View Code

      

  • 相关阅读:
    c# – 通过反射获取命名空间中的所有类型
    宝塔任务计划通道设置
    DRF项目框架基础设计
    Redis-数据特征和应用场景
    Redis-持久化详解
    Dockerfile文件详解
    ntp同步阿里服务器时间(centos)
    NUC8/11更新EC Firmware
    ambarella H2 kernel调试记录
    MobaXterm 执行make menuconfig不能删除字符
  • 原文地址:https://www.cnblogs.com/szmssf/p/10834452.html
Copyright © 2011-2022 走看看