HDU-2126 Buy the souvenirs
数组01背包。
http://acm.hdu.edu.cn/showproblem.php?pid=2126
http://blog.csdn.net/crazy_ac/article/details/7869411
f[i][j][k]表示前i种物品,买了j个,花了小于等于k的钱的时候的方案数
因为是小于等于k,所以初始化的时候要注意哦。
那么转移的时候第i种物品取或者不取
f[i][j][k]+=f[i-1][j][k];
f[i][j][k]+=f[i-1][j-1][k-v[i]];
Buy the souvenirs
Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 748 Accepted Submission(s): 255

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.
#include<iostream>
#include<cstring>
using namespace std;
int f[50][50][510],v[50];
int n,m,ans1,ans2;
int fun()
{
int i,j,k;
for(i=n;i>0;i--)
for(j=i;j>0;j--)
for(k=m;k>=0;k--)
if(f[i][j][k])
{
ans1=f[i][j][k];
ans2=j;
return 1; } return 0;
}
int main()
{
int i,j,k,t;
cin>>t;
while(t--)
{ memset(v,0,sizeof(v));
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>v[i];
memset(f, 0, sizeof(f));
for(i = 0; i <= n; i++)
for(j = 0; j <= m; j++)
f[i][0][j] = 1;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=m;k>=0;k--)
{
f[i][j][k]+=f[i-1][j][k];
if(k>=v[i])
f[i][j][k]+=f[i-1][j-1][k-v[i]];
}
if(fun())
cout<<"You have "<<ans1<<" selection(s) to buy with "<<ans2<<" kind(s) of souvenirs."<<endl;
else
cout<<"Sorry, you can't buy anything."<<endl;
}
return 0;
}
HDU-2126 Buy the souvenirs的更多相关文章
- 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(记录总方案数的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 ...
- hdu 2126 Buy the souvenirs 买纪念品(01背包,略变形)
题意: 给出一些纪念品的价格,先算出手上的钱最多能买多少种东西k,然后求手上的钱能买k种东西的方案数.也就是你想要买最多种东西,而最多种又有多少种组合可选择. 思路: 01背包.显然要先算出手上的钱m ...
- (01背包)Buy the souvenirs (hdu 2126)
http://acm.hdu.edu.cn/showproblem.php?pid=2126 Buy the souvenirs Time Limit: 10000/1000 MS (Java/Oth ...
- 【HDU 2126】Buy the souvenirs(01背包)
When the winter holiday comes, a lot of people will have a trip. Generally, there are a lot of souve ...
- HDU 2126 01背包(求方案数)
Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
随机推荐
- 使用 C# 编程对RTF文档的支持
http://www.68design.net/Development/Aspnet/Basis-AspNet/26011-1.html
- WisDom.Net 框架设计(六) license
WisDom.Net-license 1.为啥要用license license (许可证) 顾名思义就是说我的软件只能给在指定的机器上使用.毕竟很多项目都不是免费的,(说句题外话,其实我用的也 ...
- 学习java随笔第六篇:数组
一维数组 创建一维数组并输出 public class OneDimensionalArray { public static void main(String argas[]) { int i[]= ...
- [GDI+] C# ImageClass帮助类教程与源码下载 (转载)
点击下载 ImageClass.rar 功能如下图片 主要功能有:缩略图片,图片水印,文字水印,调整光暗,反色处理,浮雕处理,拉伸处理,左右翻转,上下翻转,压缩图片,图片灰度化,转换为黑白图片,获取图 ...
- java中获得IP地址
public class IPTest { public static void main(String[] args) { try{ // 获取计算机名 String name = InetAddr ...
- easyui中datagrid标题居中内容居左实现方式
easyui中的datagrid使用起来,确实还是挺轻巧方便,但是其中也有不少的问题,尤其遇到客户的一些特殊的需求时往往实现得不是很好.这个时候就需要我们自己动手来修改easyui的源码了.easyu ...
- iOS8上本地通知接收不到的问题
需要手动加上这句话 if ([UIApplicationinstancesRespondToSelector:@selector(registerUserNotificationSettings:) ...
- 【转】Objective-C中的instancetype和id关键字
原文:http://blog.csdn.net/wzzvictory/article/details/16994913 一.什么是instancetype instancetype是clang 3.5 ...
- iphone"此证书是由未知颁发机构签名的"的解决办法
由于误删除,将开发证书给弄没了,导致Certificates中更新的证书都提示此证书是由未知颁发机构签名的,不能实机调试,解决办法是重新下载AppleWWDRCA.cer 地址是:http://dev ...
- centos7 玩aapt 安卓应用apk解包工具的安装
最近在做一个应用市场的项目,需要在centos7下面对apk解包读取其信息,这就想到了使用Google的解包工具aapt,但是由于中国的原因,国内访问原生工具的地址就有些麻烦,这里就贴出地址:http ...