1235 - Coin Change (IV)
Time Limit: 1 second(s) Memory Limit: 32 MB

Given n coins, values of them are A1, A2 ... An respectively, you have to find whether you can pay K using the coins. You can use any coin at most two times.

Input

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

Each case starts with a line containing two integers n (1 ≤ n ≤ 18) and K (1 ≤ K ≤ 109). The next line contains n distinct integers denoting the values of the coins. These values will lie in the range [1, 107].

Output

For each case, print the case number and 'Yes' if you can pay K using the coins, or 'No' if it's not possible.

Sample Input

Output for Sample Input

3

2 5

1 2

2 10

1 2

3 10

1 3 5

Case 1: Yes

Case 2: No

Case 3: Yes


PROBLEM SETTER: JANE ALAM JAN
思路:折半枚举;
dfs+二分;
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stdlib.h>
7 #include<math.h>
8 #include<stack>
9 using namespace std;
10 typedef long long LL;
11 int ans[100];
12 int ak[100000];
13 int ac[100000];
14 int N,M;
15 int id1[100];
16 int id2[100];
17 void dfs(int n,int m,int sum)
18 {
19 if(n==m)
20 {
21 ak[N]=sum;
22 N++;
23 return ;
24 }
25 int i;
26 for(i=0; i<=2; i++)
27 {
28 dfs(n+1,m,sum+id1[n]*i);
29 }
30 }
31 void dfs1(int n,int m,int sum)
32 {
33 if(n==m)
34 {
35 ac[M]=sum;
36 M++;
37 return ;
38 }
39 int i;
40 for(i=0; i<=2; i++)
41 {
42 dfs1(n+1,m,sum+id2[n]*i);
43 }
44 }
45 int er(int n,int m,int ask)
46 {
47 int mid=(n+m)/2;
48 if(n>m)
49 return 0;
50 if(ac[mid]==ask)
51 {
52 return 1;
53 }
54 else if(ac[mid]>ask)
55 {
56 return er(n,mid-1,ask);
57 }
58 else return er(mid+1,m,ask);
59
60 }
61 int main(void)
62 {
63 int i,j,k;
64 scanf("%d",&k);
65 int s;
66 int n,m;
67 for(s=1; s<=k; s++)
68 {
69 scanf("%d %d",&n,&m);
70 for(i=0; i<n; i++)
71 {
72 scanf("%d",&ans[i]);
73 }
74 int cnt1=n/2;
75 int cnt2=n-cnt1;
76 for(i=0; i<cnt1; i++)
77 {
78 id1[i]=ans[i];
79 }
80 for(i=cnt1; i<n; i++)
81 {
82 id2[i-cnt1]=ans[i];
83 }
84 N=0;
85 M=0;
86 dfs(0,cnt1,0);
87 dfs1(0,cnt2,0);
88 sort(ac,ac+M);
89 int flag=0;
90 for(i=0; i<N; i++)
91 {
92 int ask=m-ak[i];
93 flag=er(0,M-1,ask);
94 if(flag)break;
95 }
96 printf("Case %d: ",s);
97 if(flag)
98 printf("Yes\n");
99 else printf("No\n");
100 }
101 return 0;
102 }

1235 - Coin Change (IV)的更多相关文章

  1. LightOJ 1235 - Coin Change (IV) (折半枚举)

    题目链接: http://www.lightoj.com/volume_showproblem.php?problem=1235 题目描述: 给出n个硬币,每种硬币最多使用两次,问能否组成K面值? 解 ...

  2. Lightoj 1235 - Coin Change (IV) 【二分】

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1235 题意: 有N个硬币(N<=18).问是否能在每一个硬币使用不超过两 ...

  3. Coin Change (IV) (dfs)

    Coin Change (IV) Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu [Subm ...

  4. [LeetCode] Coin Change 硬币找零

    You are given coins of different denominations and a total amount of money amount. Write a function ...

  5. HDOJ 2069 Coin Change(母函数)

    Coin Change Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. HDU 2069 Coin Change

    Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. UVA 674 Coin Change(dp)

    UVA 674  Coin Change  解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...

  8. JSU省赛队员选拔赛个人赛1(Coin Change、Fibbonacci Number、Max Num、单词数、无限的路、叠筐)

    JSU省赛队员选拔赛个人赛1 一.题目概述: A.Coin Change(暴力求解.动态规划)     B.Fibbonacci Number(递推求解) C.Max Num(排序.比较) D.单词数 ...

  9. C - Coin Change (III)(多重背包 二进制优化)

    C - Coin Change (III) Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

随机推荐

  1. 使用SpringBoot实现文件的下载

    上一篇博客:使用SpringBoot实现文件的上传 已经实现了文件的上传,所以紧接着就是下载 首先还是html页面的简单设计 <form class="form-signin" ...

  2. C#表格,表格信息、GridView使用。

    page: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="test1.a ...

  3. abuse

    abuse 近/反义词: ill-treat, maltreat, mistreat, misuse, prostitute, spoil; defame, disparage, malign, re ...

  4. Android 图片框架

    1.图片框架:Picasso.Glide.Fresco 2.介绍: picasso:和Square的网络库能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现 Glid ...

  5. VUE页面实现加载外部HTML方法

    前后端分离,后端提供了接口.但有一部分数据,比较产品说明文件,是存在其他的服务器上的.所以,在页面显示的时候,如果以页面内嵌的形式显示这个说明文件.需要搞点事情以达到想要的效果.本文主要和大家介绍VU ...

  6. 理解JMX之介绍和简单使用

    JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX,然后使用JConsole或Visual VM进行预览.下图是使用Jconsle通过JMX查看Java程序的运 ...

  7. jQuery 的两种语法

    文档就绪事件(文档加载完成之后才执行jQuer代码): 第一种: $(document).ready(function() { // jQuery 代码.... }); 第二种: $(function ...

  8. 【C/C++】函数的默认参数/函数的占位参数/函数重载/注意事项

    函数的默认参数 返回值类型 函数名(参数=默认值){} #include <iostream> using namespace std; int func(int a = 10, int ...

  9. IDE常用插件

    IDE 常用插件集合 :

  10. Jenkins安全加固

    1.jenkins未授权访问 描述 jenkins不当配置可导致未授权访问管理控制台,可以通过脚本命令行执行系统命令.通过该漏洞,可以后台管理服务,通过脚本命令行功能执行系统命令,如反弹shell,w ...