hdu 2126 Buy the souvenirs(记录总方案数的01背包)
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
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).
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.
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.”
#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背包)的更多相关文章
- hdu 2126 Buy the souvenirs 买纪念品(01背包,略变形)
题意: 给出一些纪念品的价格,先算出手上的钱最多能买多少种东西k,然后求手上的钱能买k种东西的方案数.也就是你想要买最多种东西,而最多种又有多少种组合可选择. 思路: 01背包.显然要先算出手上的钱m ...
- hdu 2126 Buy the souvenirs 二维01背包方案总数
Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- [HDU 2126] Buy the souvenirs (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意:给你n个物品,m元钱,问你最多能买个多少物品,并且有多少种解决方案. 一开始想到的是,先解 ...
- HDU 2126 Buy the souvenirs (01背包,输出方案数)
题意:给出t组数据 每组数据给出n和m,n代表商品个数,m代表你所拥有的钱,然后给出n个商品的价值 问你所能买到的最大件数,和对应的方案数.思路: 如果将物品的价格看做容量,将它的件数1看做价值的话, ...
- hdu 2126 Buy the souvenirs 【输出方案数】【01背包】(经典)
题目链接:https://vjudge.net/contest/103424#problem/K 转载于:https://blog.csdn.net/acm_davidcn/article/detai ...
- hdu2126(求方案数的01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意: n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数. 分析:一看 ...
- NHibernate使用ICriteria分页并返回数据库记录总条数
最近在使用NHibernate,发现进行分页查询无法得到数据库记录的总条数,在网上找了很久没找到具体的实现方法,找到的资料都说得不是很清楚,研究了很久终于写出了这样一个方法. NHibernate下分 ...
- 筛选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 ...
- PageHelper 记录总条数不正确问题处理
//PageHelper.startPage会返回一个page对象,这个对象在查询结果出来后会把页数,记录总数给page对象,用page.getPages()和getTotal()获取页数和记录总数. ...
随机推荐
- hdu 2444 The Accomodation of Students(二分匹配 匈牙利算法 邻接表实现)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- Struts framework
Struts功能详解——ActionMapping对象 Struts旅程(一)Struts简介和原理 实例讲解DispatchAction和LookupDispatchAction DispatchA ...
- update批量更新某一列成其它列对应的值【原】
update批量更新某一列成其它列对应的值 postgresql 标准sql语句 update AA set name = BB.name , AA.sex = BB.sex from BB wher ...
- SQL优化系列(一)- 优化SQL
优化SQL SQL开发人员从源代码中发现一条跑得很慢的SQL, 如何优化? DBA从AWR报告中发现一条跑得很慢的SQL,没有源代码或者不想修改源代码怎么办? SQL自动优化工具SQL Tuning ...
- 苹果建议开发者在iOS 7正式发布之前把应用提交至App Store
今早在给开发者的邮件中,苹果建议开发者在下周9月18日正式发布iOS 7之前把应用提交至App Store.邮件特别提到了iOS 7的新功能,还提到了充分利用iPhone 5S功能的新API,比如M7 ...
- Linux安装mongoDB步骤和方法
Linux安装mongoDB步骤和方法 下载mongoDB数据库 mongodb-linux-x86_64-3.0.15.tgz 存放到linux文件夹中 ftp软件直接拖上去 解压文件夹(解压后,会 ...
- docker-ce 安装和卸载
一.按照官网给的安装方法进行Ubuntu16.04 docker-ce 的安装,步骤如下: 1.由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本: sudo apt-get ...
- iis7服务器隐藏index.php
1.安装url重写模块 32位:http://download.microsoft.com/download/4/9/C/49CD28DB-4AA6-4A51-9437-AA001221F606/re ...
- 阿里云异构计算发布:轻量级GPU云服务器实例VGN5i
阿里云发布了国内首个公共云上的轻量级GPU异构计算产品——VGN5i实例,该实例打破了传统直通模式的局限,可以提供比单颗物理GPU更细粒度的服务,从而让客户以更低成本.更高弹性开展业务.适用于云游戏. ...
- LeetCode114 Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place. (Medium) For example,Given 1 / \ 2 5 / \ ...