Baby Coins
题意
描述
Baby 今天清点自己的百宝箱啦,箱子里有n 种硬币,硬币的面值分别是:val[1],val[2],...,val[n],每种面值的硬币都恰好有2 个。
Baby 实在闲的太无聊了,他想从他所拥有的硬币中选出若干个,使得面值之和为k。那么他的目标能否实现呢~
输入
先输入T,代表数据一共有T 组,(T ≤ 100)
每一组数据第一行都包含两个数字n(n≤18),k(1≤k≤109)
n 代表箱子中所包含的硬币种数,k 代表Baby 需要组成的金钱数额。
接下来的一行代表val[1],val[2],......,val[n]。(1≤val[i]≤ 10^7)
输出
如果Baby能组成金钱数额k,请输出Yes,否则输出No。
输入样例 1
2
2 10
3 4
3 9
1 2 10
输出样例 1
Case 1: Yes
Case 2: No
分析
每种硬币可以取 0或1或2个
所以有3^18种,暴力复杂度是很高的。所以想办法解决问题
把一半种硬币的各种组合值存在一个set里,其他在另一个set里。
最后看两个set能不能凑到k即可
set.find()的复杂度是log所以降低了整体复杂度
代码
#include<iostream>
#include<set>
using namespace std;
set<int> se1,se2;
int a[20];
void all(int up,int low,int sum,std::set<int> &se){
if(low==up){
se.insert(sum); return;
}
all(up,low+1,sum,se);
all(up,low+1,sum+a[low],se);
all(up,low+1,sum+2*a[low],se);
}
bool ok(int k){
for(set<int> ::iterator it=se1.begin();it!=se1.end();it++){
if(se2.find(k-*it)==se2.end()) continue;
return true;
}
return false;
}
int main(){
int t,n,k,kase=0;
//freopen("in.txt","r",stdin);
cin>>t;
while(t--){
cin>>n>>k;
for(int i=0;i<n;i++) cin>>a[i];
bool g=false;
if(n==1){
if(k==a[0]||k==2*a[0]) g=true;
}
else{
se1.clear(),se2.clear();
all(n/2,0,0,se1);
all(n,n/2,0,se2);
g=ok(k);
cout<<"Case "<<++kase<<": "<<(g?"Yes\n":"No\n");
}
}
return 0;
}
Baby Coins的更多相关文章
- [LeetCode] Arranging Coins 排列硬币
You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...
- ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力
Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS Memory Limit:65536KB 64bit IO Fo ...
- Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)
传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...
- csuoj 1119: Collecting Coins
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1119 1119: Collecting Coins Time Limit: 3 Sec Memo ...
- Coins
Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hi ...
- hdu 1398 Square Coins (母函数)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ...
- POJ3260The Fewest Coins[背包]
The Fewest Coins Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6299 Accepted: 1922 ...
- POJ1742 Coins[多重背包可行性]
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 34814 Accepted: 11828 Descripti ...
随机推荐
- 使用GDB调试gp(转载)
使用 gdb 调试 postgres greenplum zalax3030人评论715人阅读2012-07-11 10:07:15 错误信息的获取途径有几种 : 1. 最简单的就是看Postg ...
- ASP.NET MVC从视图传参到控制器的几种形式
1. 传递数组 $(function () { var value = ["C#", "JAVA", "PHP"]; $("inp ...
- EOS智能合约开发(三):EOS创建和管理账号
没有看前面文章的小伙伴可以看一下 EOS智能合约开发(一):EOS环境搭建和启动节点 EOS智能合约开发(二):EOS创建和管理钱包 创建好钱包.密钥之后,接下来你就可以创建账号了,账号是什么?账号保 ...
- mysql性能排查思路
mysql性能瓶颈排查 top/free/vmstat/sar/mpstat 查看mysqld进程的cpu消耗占比 确认mysql进程的cpu消耗是%user, 还是sys%高 确认是否是物理内存 ...
- xp,windows7,windows8,windows10那个系统好用些
Windows XP:这曾经是微软史上最好的.最受欢迎.最受好评的可以说空前绝后的系统,虽然,XP系统对电脑配置的要求很低,基本现在所有的电脑都支持安装该系统,可它太老旧了,到2014年4-5月份微软 ...
- 【COCOS2DX-游戏开发之三一】之 坐标系(下) convertToNodeSpace和convertToWorldSpace
游戏中常常会用到一些变换: 游戏中武器和角色在一个layer上,为了效率.会考虑将bullet, effect和 PhysicsParticle分别放到不用的层上,相应的层上使用batchnode来提 ...
- Visual Studio Code 支持TensorFlow配置支持
首先选择解释器 选择TensorFlow版本的conda版本 (当然你如果是通过python单独安装的TensorFlow也可以) 编辑器输入代码,进行测试 import tensorflow as ...
- P2080 增进感情(背包DP)
思路:将好感度x+y作为体积, 幸福度x-y作为作为价值, 然后就是一个经典的背包问题了.emmmmm,还可以特判一下,因为幸福度为0时就是最小了,没有必要看后面的了吧. 其实,我自己做的时候,沙雕的 ...
- JDK动态代理(3)--------动态代理具体实现
写个HelloWorld 接口 package com.spring.aop.proxy; public interface HelloWorld { public void sayHello(); ...
- AI LeNet
LeNet 参考链接: http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf https://www.charleychai.com/blogs/20 ...