• 玩具(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

      

  • 相关阅读:
    从零开始系统深入学习android(实践让我们开始写代码Android框架学习7.App Widgets)
    用才智征服天下,用信誉赢得未来
    微众时代看网络营销
    营销不是传奇,欠的只是方法
    名扬天下,从这里出发
    【缅怀妈妈系列诗歌】之二十六:贺诞母亲
    营销密码,带你走进神奇地带
    打造“80后”第一营销品牌
    如果有一天
    把你写进诗里
  • 原文地址:https://www.cnblogs.com/szmssf/p/10834452.html
Copyright © 2020-2023  润新知