当前位置:首页 > C++目录 > 正文内容

【题解】玩具

亿万年的星光12个月前 (12-28)C++目录835

【题目描述】

商店正在出售蒜头君最喜欢的系列玩具,在接下来的 " 周中,每周会出售其中的一款,同一款玩具不会重复出现。由于是蒜头君最喜欢的系列,他希望尽可能多地购买这些玩具,但是同一款玩具蒜头君只会购买一个。同时,蒜头君的预算只有元,因此他无法将每一款都纳入囊中。此外,蒜头君不能连续两周都购买玩具,否则他会陷入愧疚。现在蒜头君想知道,他最多可以买多少款不同的玩具呢?

【输入格式】

输入共2行:

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

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

【输出格式】

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

【数据范围】

对于 30%的数据,n< 10,m< 100;

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

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

------------------------------

【题目分析】

很显然,这个题目是一个背包问题,我们设置 dp 数组为 dp|ij],表示第i周预算为j的最多可以买多少款不同的玩具。

通过转移方程 dp[i][j]= max(dp[i-1][j],dp[i-2][j-a[i]]+ 1);和 dp[i][j|= dp[i- 1][j]; 进行转移即可。


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

如何估算时间复杂度

首先:  常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)时间复杂度可以简单理解为最多执...

【题解】围圈报数(约瑟夫问题)

【题解】围圈报数(约瑟夫问题)

【题目描述】有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个热呢又出列,... ,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,......

【题解】最短路径问题

【题目描述】平面上有n个点(n≤100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现...

混合背包

1.问题定义:混合背包问题是经典背包问题的一个变种,其中物品的类型不单一,而是混合了以下三种类型:01 背包物品:每种物品最多只能选一次。完全背包物品:每种物品可以选择无限次。多重背包物品:每种物品有...

C++中箭头指针的含义及用法

C++中箭头指针的含义及用法

0.前言c++中我们在一些程序中看到箭头 p—>stu 类似于这样的表示。今天就简单来解释一下点运算和箭头运算。1.点运算常见的点一般出现在结构体中,比如下面的代码:#include<io...

【数论】组合数学—容斥原理

【数论】组合数学—容斥原理

概念在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重...