Buy the souvenirs

Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1662    Accepted Submission(s):
611

Problem Description
When the winter holiday comes, a lot of people will
have a trip. Generally, there are a lot of souvenirs to sell, and sometimes the
travelers will buy some ones with pleasure. Not only can they give the souvenirs
to their friends and families as gifts, but also can the souvenirs leave them
good recollections. All in all, the prices of souvenirs are not very dear, and
the souvenirs are also very lovable and interesting. But the money the people
have is under the control. They can’t buy a lot, but only a few. So after they
admire all the souvenirs, they decide to buy some ones, and they have many
combinations to select, but there are no two ones with the same kind in any
combination. Now there is a blank written by the names and prices of the
souvenirs, as a top coder all around the world, you should calculate how many
selections you have, and any selection owns the most kinds of different
souvenirs. For instance:

And you have only 7
RMB, this time you can select any combination with 3 kinds of souvenirs at most,
so the selections of 3 kinds of souvenirs are ABC (6), ABD (7). But if you have
8 RMB, the selections with the most kinds of souvenirs are ABC (6), ABD (7), ACD
(8), and if you have 10 RMB, there is only one selection with the most kinds of
souvenirs to you: ABCD (10).

 
Input
For the first line, there is a T means the number
cases, then T cases follow.
In each case, in the first line there are two
integer n and m, n is the number of the souvenirs and m is the money you have.
The second line contains n integers; each integer describes a kind of souvenir.

All the numbers and results are in the range of 32-signed integer, and
0<=m<=500, 0<n<=30, t<=500, and the prices are all positive
integers. There is a blank line between two cases.
 
Output
If you can buy some souvenirs, you should print the
result with the same formation as “You have S selection(s) to buy with K kind(s)
of souvenirs”, where the K means the most kinds of souvenirs you can buy, and S
means the numbers of the combinations you can buy with the K kinds of souvenirs
combination. But sometimes you can buy nothing, so you must print the result
“Sorry, you can't buy anything.”
 
Sample Input
2
4 7
1 2 3 4
 
 
4 0
1 2 3 4
 
Sample Output
You have 2 selection(s) to buy with 3 kind(s) of souvenirs.
Sorry, you can't buy anything.
 
Author
wangye
 
Source
 
Recommend
威士忌   |   We have carefully selected several similar
problems for you:  2128 2129 2130 2125 2124 
 
 
记录方案总数的01背包,给dp数组加一维,记录方案总数,记住需要初始化,把所有 dp[i][1] 都设置成1。
 
题意:n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数。加一维表示已经买几件物品。
 
附上代码:
 
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int T,n,m,i,j;
int a[],dp[][];
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=; i<n; i++)
scanf("%d",&a[i]);
memset(dp,,sizeof(dp));
for(i=; i<=m; i++) dp[i][]=; //先全部标记为1,能拿这么多件物品,起码有一种方案
for(i=; i<n; i++)
for(j=m; j>=a[i]; j--)
{
if(dp[j][]==dp[j-a[i]][]+) //如果记录了j元钱拿的物品数量,正好与此时记录的不拿这件物品的最多物品加1相等
dp[j][]=dp[j-a[i]][]+dp[j][];
else if(dp[j][]<dp[j-a[i]][]+) //如果小于,则更新dp
{
dp[j][]=dp[j-a[i]][]+;
dp[j][]=dp[j-a[i]][];
}
}
if(dp[m][]!=)
printf("You have %d selection(s) to buy with %d kind(s) of souvenirs.\n",dp[m][],dp[m][]);
else
printf("Sorry, you can't buy anything.\n");
}
return ;
}

hdu 2126 Buy the souvenirs(记录总方案数的01背包)的更多相关文章

  1. hdu 2126 Buy the souvenirs 买纪念品(01背包,略变形)

    题意: 给出一些纪念品的价格,先算出手上的钱最多能买多少种东西k,然后求手上的钱能买k种东西的方案数.也就是你想要买最多种东西,而最多种又有多少种组合可选择. 思路: 01背包.显然要先算出手上的钱m ...

  2. hdu 2126 Buy the souvenirs 二维01背包方案总数

    Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. [HDU 2126] Buy the souvenirs (动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意:给你n个物品,m元钱,问你最多能买个多少物品,并且有多少种解决方案. 一开始想到的是,先解 ...

  4. HDU 2126 Buy the souvenirs (01背包,输出方案数)

    题意:给出t组数据 每组数据给出n和m,n代表商品个数,m代表你所拥有的钱,然后给出n个商品的价值 问你所能买到的最大件数,和对应的方案数.思路: 如果将物品的价格看做容量,将它的件数1看做价值的话, ...

  5. hdu 2126 Buy the souvenirs 【输出方案数】【01背包】(经典)

    题目链接:https://vjudge.net/contest/103424#problem/K 转载于:https://blog.csdn.net/acm_davidcn/article/detai ...

  6. hdu2126(求方案数的01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意: n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数. 分析:一看 ...

  7. NHibernate使用ICriteria分页并返回数据库记录总条数

    最近在使用NHibernate,发现进行分页查询无法得到数据库记录的总条数,在网上找了很久没找到具体的实现方法,找到的资料都说得不是很清楚,研究了很久终于写出了这样一个方法. NHibernate下分 ...

  8. 筛选BETWEEN '2018-1-1 00:00:00' AND '2018-5-18 00:00:00'每日`status`='1'的记录总条数

    最近做了一个小任务,要求是:使用MySQL #筛选BETWEEN '2018-1-1 00:00:00' AND '2018-5-18 00:00:00'每日`status`='1'的记录总条数 SE ...

  9. PageHelper 记录总条数不正确问题处理

    //PageHelper.startPage会返回一个page对象,这个对象在查询结果出来后会把页数,记录总数给page对象,用page.getPages()和getTotal()获取页数和记录总数. ...

随机推荐

  1. JavaScript基本的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. ubuntn 18 开起ssh 并用root远程登陆

    原文:ubuntn 18 开起ssh 并用root远程登陆 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/article/details/ ...

  3. 重温 Webpack, Babel 和 React

    开始之前 在书写文章之前,我假设大家已经有了 JavaScript,Node 包管理工具,Linux 终端操作 这些基本技能,接下来,我将一步一步指引大家从头搭建一个 React 项目 最终实现的效果 ...

  4. element-ui表格列金额显示两位小数

    对于金额的显示,大多情况下需要保留两位小数,比如下面的(表格采用 element-ui): 在vue.js中,对文本的处理通常是通过设置一系列的过滤器,过滤器可以用在两个地方:双花括号插值 和 v-b ...

  5. OSGi Capabilities

    OSGi bundle的Capability就是这个bundle所具有的能力. 就像淘宝上的每个店铺一样,它会说明自己都卖哪些东西,也就是Provide-Capability 我们这些剁手党就会根据自 ...

  6. centOS7 安装vsftp服务器

    一.目的:有许多时候我们需要从自己机器上,上传文件到Linux服务器上,想要上传文件就必须要通过FTP 协议(File Transfer Protocol(文件传输协议)).所以要在服务器上配置FTP ...

  7. pl/sql进阶——例外处理

    在pl/sql的执行过程中发生异常时系统所作的处理称为一个例外情况(exception).通常例外情况的种类有三种: ①预定义的oracle例外情况,oracle预定义的例外情况大约有24个,对于这种 ...

  8. 如何在“代码”视图中工作并充分利用 Dreamweaver 的编码功能。如 Emmet 缩写

    可通过多种方式在 Dreamweaver 中处理代码. 您可以使用“新建文档”对话框打开新的代码文件,然后开始键入您的代码. 在 Dreamweaver 中创建新的代码文件 键入时,会显示代码提示以帮 ...

  9. poj1459 最大流Dinic

    比较简单. #include<stdio.h> #include<string.h> #include<queue> #define maxn 110 #defin ...

  10. 2019-4-29-dotnet-通过-WMI-获取系统安装软件

    title author date CreateTime categories dotnet 通过 WMI 获取系统安装软件 lindexi 2019-04-29 12:18:59 +0800 201 ...