Gym - 100712G Heavy Coins(二进制枚举)
2017-05-05 14:26
323 查看
https://vjudge.net/problem/Gym-100712G
题意:
给出n枚不同价值的硬币和一个总价S,现在要选择尽量多的硬币来大于等于S,要求是比如说现在选择的硬币的总和为sum,那么所选择的任何一个硬币x,sum-x都必须<S。
思路:
一开始是想排序然后优先选择小的...没想到最后是暴力枚举。
因为N很小,最大也就是10,每枚要么选,要么不选,二进制枚举。
题意:
给出n枚不同价值的硬币和一个总价S,现在要选择尽量多的硬币来大于等于S,要求是比如说现在选择的硬币的总和为sum,那么所选择的任何一个硬币x,sum-x都必须<S。
思路:
一开始是想排序然后优先选择小的...没想到最后是暴力枚举。
因为N很小,最大也就是10,每枚要么选,要么不选,二进制枚举。
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<cmath> #include<map> #include<stack> using namespace std; int a[15]; int main() { //freopen("D:\\input.txt","r",stdin); int T; int n,s; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&s); for(int i=0;i<n;i++) scanf("%d",&a[i]); int ans=0; for(int i=0;i<(1<<n);i++) { int MIN=2000; int sum=0; int num=0; for(int j=0;j<n;j++) { if(i&(1<<j)) { num++; sum+=a[j]; MIN=min(MIN,a[j]); } } if(sum>=s && sum-MIN<s) ans=max(ans,num); } printf("%d\n",ans); } return 0; }
相关文章推荐
- Gym 100712G Heavy Coins(二进制枚举子集)
- 【递推】【DFS】【枚举】Gym - 101246C - Explode 'Em All
- 【二进制枚举】求在n个数中取任意个数加起来组成x的方案数
- 二进制序列枚举
- 51 nod 1625 夹克爷发红包【贪心、二进制枚举】
- poj 1416 Shredding Company 二进制枚举
- hdu6166-最短路&二进制枚举-Senior Pan
- GYM 100883 J.palprime(枚举)
- UVA 1151 && POJ 2784 - Buy or Build 最小生成树 二进制枚举
- Codeforces Gym 100002 B Bricks 枚举角度
- hdu1796(二进制枚举)
- 二进制枚举子集
- Gym 101308D Database 枚举
- 技巧-二进制枚举
- 【DFS】【枚举】Gym - 101246G - Revolutionary Roads
- Fliptile POJ3279 二进制压缩枚举 解题报告
- UVA 10325 The Lottery (组合数学,容斥原理,二进制枚举)
- 组队赛3解题报告:精度与二进制枚举
- usaco2.1.4-----Healthy Holsteins(二进制枚举)
- GYM 101086 F.Hey JUDgE(枚举)