1127 - Funny Knapsack
Time Limit: 2 second(s) Memory Limit: 32 MB

Given n integers and a knapsack of weight W, you have to count the number of combinations for which you can add the items in the knapsack without overflowing the weight.

Input

Input starts with an integer T (≤ 100), denoting the number of test cases.

Each case contains two integers n (1 ≤ n ≤ 30) and W (1 ≤ W ≤ 2 * 109) and the next line will contain n integers separated by spaces. The integers will be non negative and less than 109.

Output

For each set of input, print the case number and the number of possible combinations.

Sample Input

Output for Sample Input

3

1 1

1

1 1

2

3 10

1 2 4

Case 1: 2

Case 2: 1

Case 3: 8

思路:一个超大背包问题,用折半枚举然后二分查找;

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stack>
7 #include<set>
8 #include<math.h>
9 using namespace std;
10 typedef long long LL;
11 LL ans[100];
12 LL ak1[40000];
13 LL ak2[40000];
14 LL bk1[50];
15 LL bk2[50];
16 int main(void)
17 {
18 int i,j,k;
19 scanf("%d",&k);
20 int s;
21 int n;
22 LL m;
23 for(s=1; s<=k; s++)
24 {
25 scanf("%d %lld",&n,&m);
26 for(i=0; i<n; i++)
27 {
28 scanf("%lld",&ans[i]);
29 }
30 for(i=0; i<(n/2); i++)
31 {
32 bk1[i]=ans[i];
33 }
34 for(j=0; i<n; j++,i++)
35 {
36 bk2[j]=ans[i];
37 }
38 int n1=(n/2);
39 int n2=n-n1;
40 for(i=0; i<=(1<<n1)-1; i++)
41 {
42 LL sum=0;
43 for(j=0; j<n1; j++)
44 {
45 if(i&(1<<j))
46 {
47 sum+=bk1[j];
48 }
49 }
50 ak1[i]=sum;
51 }
52 int num=(1<<n2)-1;
53 for(i=0; i<=(1<<n2)-1; i++)
54 {
55 LL sum=0;
56 for(j=0; j<n2; j++)
57 {
58 if(i&(1<<j))
59 sum+=bk2[j];
60 }
61 ak2[i]=sum;
62 }
63 sort(ak2,ak2+num);
64 LL sum=0;
65 for(i=0; i<(1<<n1); i++)
66 {
67 int l=0;
68 int r=(1<<n2)-1;
69 LL ask=m-ak1[i];
70 if(ask>=0)
71 {
72 int cc=-1;
73 while(l<=r)
74 {
75 int mid=(l+r)/2;
76 if(ak2[mid]<=ask)
77 {
78 cc=mid;
79 l=mid+1;
80 }
81 else r=mid-1;
82 }
83 sum+=(cc+1);
84
85 }
86 }
87 printf("Case %d: %lld\n",s,sum);
88 }
89 return 0;
90 }

1127 - Funny Knapsack的更多相关文章

  1. Lightoj 1127 - Funny Knapsack 【二分】

    题目链接:problem=1127">http://www.lightoj.com/volume_showproblem.php?problem=1127 题意:有n个物体(n< ...

  2. hdu 1712, multiple-choice knapsack, 分类: hdoj 2015-07-18 13:25 152人阅读 评论(0) 收藏

    reference: 6.4 knapsack in Algorithms(算法概论), Sanjoy Dasgupta University of California, San Diego Chr ...

  3. knapsack problem 背包问题 贪婪算法GA

    knapsack problem 背包问题贪婪算法GA 给点n个物品,第j个物品的重量,价值,背包的容量为.应选哪些物品放入包内使物品总价值最大? 规划模型 max s.t. 贪婪算法(GA) 1.按 ...

  4. [UCSD白板题] Fractional Knapsack

    Problem Introduction Given a set of items and total capacity of a knapsack,find the maximal value of ...

  5. (01背包 当容量特别大的时候) Knapsack problem (fzu 2214)

    http://acm.fzu.edu.cn/problem.php?pid=2214   Problem Description Given a set of n items, each with a ...

  6. FOJProblem 2214 Knapsack problem(01背包+变性思维)

    http://acm.fzu.edu.cn/problem.php?pid=2214 Accept: 4    Submit: 6Time Limit: 3000 mSec    Memory Lim ...

  7. 背包问题(Knapsack problem)采用动态规划求解

    问题说明: 假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品,假设是水果好了,水果的编号.单价与重量如下所示:0李子4KGNT$45001苹果5KGNT$57002橘子2 ...

  8. FZU 2214 Knapsack problem(背包问题)

    Description 题目描述 Given a set of n items, each with a weight w[i] and a value v[i], determine a way t ...

  9. FZU 2214 Knapsack problem 01背包变形

    题目链接:Knapsack problem 大意:给出T组测试数据,每组给出n个物品和最大容量w.然后依次给出n个物品的价值和体积. 问,最多能盛的物品价值和是多少? 思路:01背包变形,因为w太大, ...

随机推荐

  1. hbase调优

    @ 目录 一.phoenix调优 1.建立索引超时,查询超时 2.预分区 hbase shell预分区 phoenix预分区 3.在创建表的时候指定salting. 4.二级索引 建立行键与列值的映射 ...

  2. A Child's History of England.2

    They made boats of basket-work, covered with the skins of animals, but seldom, if ever, ventured far ...

  3. 20. VIM命令操作技巧

    V可视化选中当前行,根据光标可多行 ctrl+v 可视化块 v可视化根据光标 行间移动 快速增删改查 d 0 删除当前位置到行首 d $ 删除当前位置到行尾 d  t  (" ] ) )符号 ...

  4. Spark(二十)【SparkSQL将CSV导入Kudu】

    目录 SparkSql 将CSV导入kudu pom 依赖 scala 代码 启动脚本 SparkSql 将CSV导入kudu pom 依赖 <properties> <spark. ...

  5. Flume(三)【进阶】

    [toc] 一.Flume 数据传输流程 重要组件: 1)Channel选择器(ChannelSelector) ​ ChannelSelector的作用就是选出Event将要被发往哪个Channel ...

  6. 【leetocde】922. Sort Array By Parity II

    Given an array of integers nums, half of the integers in nums are odd, and the other half are even.  ...

  7. ping (网络诊断工具)

    Ping是Windows.Unix和Lnix系统下的一个命令,ping也属于一个通信协议,是TCP/IP协议的一部分,利用Ping命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障.应用格 ...

  8. Oracle bulk collect into 的几种用法

    bulk collect 和 forall 联合应用写起来显得有些啰嗦,不过为了速度,多写两句又何妨 建立两个临时表 create table T_TEST ( TESTID NUMBER(19) n ...

  9. shell条件测试语句实例-测试apache是否开启

    终于理解了shell条件测试语句"!="和"-n"的用法区别,于是有了如下的shell脚本,做为练习. 第一种方法:测试apache是否开启?字符串测试 #!/ ...

  10. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...