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. LUOGU 1278 单词游戏

    题目描述 Io和Ao在玩一个单词游戏. 他们轮流说出一个仅包含元音字母的单词,并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致. 游戏可以从任何一个单词开始. 任何单词禁止说两遍,游戏中只 ...

  2. Watering Grass (贪心,最小覆盖)

    参考: https://blog.csdn.net/shuangde800/article/details/7828675 https://www.cnblogs.com/haoabcd2010/p/ ...

  3. 几种支持REST的Java框架

    目前宣称支持REST的Java框架包括以下这些: Restlet(http://www.restlet.org/) Cetia4(https://cetia4.dev.java.net/) Apach ...

  4. vue自定义全局公共函数

    单独零散的函数 在main.js里进行全局注册 Vue.prototype.ajax = function (){} 在所有组件里可调用 this.ajax() 多个函数定义在一个对象里 // xx. ...

  5. 阿里云linux服务器到期后续费,网站打不开解决方法之一

    续费后打不开网站,可能会出现不同情况,这里只记录我遇到的问题 问题描述:服务器到期后续费,网站打不开. 解决尝试: 1.重启服务器nginx    /etc/init.d/nginx restart ...

  6. Gradle中的buildScript,gradle wrapper,dependencies等一些基础知识

    就想收藏一篇好文,哈哈,无他 Gradle中的buildScript代码块 - 黄博文 然后记录一些gradle的基础知识: 1.gradle wrapper就是对gradle的封装,可以理解为项目内 ...

  7. Codeforces 442C

    题目链接 C. Artem and Array time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  8. 洛谷 P3951 小凯的疑惑 找规律

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例: 输出样例: 说明 思路 证明 AC代码 include<bits/stdc++.h> 题面 ...

  9. 2019-9-23-dotnet-判断特定进程存在方法

    title author date CreateTime categories dotnet 判断特定进程存在方法 lindexi 2019-09-23 16:20:42 +0800 2019-09- ...

  10. 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H Skiing【拓扑排序,关键路径】

    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛  H Skiing In this winter holiday, Bob has a plan for skiing at the moun ...