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 |
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)的更多相关文章
- LightOJ 1235 - Coin Change (IV) (折半枚举)
题目链接: http://www.lightoj.com/volume_showproblem.php?problem=1235 题目描述: 给出n个硬币,每种硬币最多使用两次,问能否组成K面值? 解 ...
- Lightoj 1235 - Coin Change (IV) 【二分】
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1235 题意: 有N个硬币(N<=18).问是否能在每一个硬币使用不超过两 ...
- Coin Change (IV) (dfs)
Coin Change (IV) Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu [Subm ...
- [LeetCode] Coin Change 硬币找零
You are given coins of different denominations and a total amount of money amount. Write a function ...
- HDOJ 2069 Coin Change(母函数)
Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2069 Coin Change
Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- UVA 674 Coin Change(dp)
UVA 674 Coin Change 解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...
- JSU省赛队员选拔赛个人赛1(Coin Change、Fibbonacci Number、Max Num、单词数、无限的路、叠筐)
JSU省赛队员选拔赛个人赛1 一.题目概述: A.Coin Change(暴力求解.动态规划) B.Fibbonacci Number(递推求解) C.Max Num(排序.比较) D.单词数 ...
- C - Coin Change (III)(多重背包 二进制优化)
C - Coin Change (III) Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
随机推荐
- MongoDB的搭建、参数
Mongodb官网:https://www.mongodb.com/ mkdir -r /data/db touch /data/log tar -zxvf mongodb-linux-x86_6 ...
- 日常Java 2021/10/26
HashSet基于HashMap来实现的,是一个不允许有重复元素的集合.HashSet 允许有null 值. HashSet是无序的,即不会记录插入的顺序. HashSet不是线程安全的,如果多个线程 ...
- 基于树莓派部署 code-server
code-server 是 vscode 的服务端程序,通过部署 code-server 在服务器,可以实现 web 端访问 vscode.进而可以达到以下能力: 支持跨设备(Mac/iPad/iPh ...
- A Child's History of England.8
CHAPTER 3 ENGLAND UNDER THE GOOD SAXON, ALFRED Alfred [born in 849 CE, 唐: 618年-907年] the Great was a ...
- VSCode+Maven+Hadoop开发环境搭建
在Maven插件的帮助下,VSCode写Java其实非常方便.这一讲我们介绍如何借助maven用VScode搭建Hadoop开发环境. 1.Java环境安装 首先我们需要搭建好Java开发环境.我们需 ...
- Mybatis逆向工程简单介绍
转自:https://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sq ...
- nodeJs-process对象
JavaScript 标准参考教程(alpha) 草稿二:Node.js process对象 GitHub TOP process对象 来自<JavaScript 标准参考教程(alpha)&g ...
- 一起手写吧!ES5和ES6的继承机制!
原型 执行代码var o = new Object(); 此时o对象内部会存储一个指针,这个指针指向了Object.prototype,当执行o.toString()等方法(或访问其他属性)时,o会首 ...
- 【编程思想】【设计模式】【行为模式Behavioral】Specification
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/specification.py #!/usr/bin/e ...
- 通过Jedis操作Redis
package com.yh; import org.junit.After; import org.junit.Before; import org.junit.Test; import redis ...