Codevs 2144 砝码称重 2
2017-10-18 21:25
281 查看
2144 砝码称重 2
时间限制: 1 s空间限制: 16000 KB
题目等级 : 钻石 Diamond
题解
题目描述 Description
有n个砝码,现在要称一个质量为m的物体,请问最少需要挑出几个砝码来称?
注意一个砝码最多只能挑一次
输入描述 Input Description
第一行两个整数n和m,接下来n行每行一个整数表示每个砝码的重量。
输出描述 Output Description
输出选择的砝码的总数k,你的程序必须使得k尽量的小。
样例输入 Sample Input
3 10
5
9
1
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
1<=n<=30,1<=m<=2^31,1<=每个砝码的质量<=2^30
#include<iostream> #include<cstdio> #include<algorithm> #include<map> using namespace std; int ans(1000),w[50],n; long long mm; map<int, int>m; void dfs(int js,int last,int sum,bool k) { int r=n; if(k){m[sum]=js;r/=2;} else { if(m.find(mm - sum)!=m.end()) ans=min(ans,js+m[mm-sum]); } for(int i=last;i<r;i++) dfs(js+1,i+1,sum+w[i],k); } int main() { scanf("%d%lld",&n,&mm); for(int i=0;i<n;i++) scanf("%d",&w[i]); dfs(0,0,0,true); dfs(0,n/2,0,false); printf("%d\n",ans); return 0; }
100分 meet in the middle
相关文章推荐
- 【codevs2144】砝码称重2,哈希什么的都去死吧
- CODEVS 2144 砝码称重2
- 刷题记录-codevs2144 砝码称重 2
- codevs砝码称重 回溯+动态规划
- codevs 2144 砝码称重 2(搜索+剪枝)
- [wikioi2144]砝码称重2(另类的dfs)
- Wikioi 2144 砝码称重
- 2144 砝码称重 2
- wikioi 2144 砝码称重 2 STL_map
- codevs 2144 砝码称重2
- 2144 砝码称重 2
- CODEVS_2144 砝码称重 2 折半搜索+二分查找+哈希
- CODEVS_2144 砝码称重 2 折半搜索+二分查找+哈希
- 2144 砝码称重 2
- wikioi-天梯-提高一等-哈希表-2144:砝码称重2
- 2144 砝码称重 2 用map离散化hasi+二分搜索
- VSCODE 插件初探,顺便还有博主的写的背景图插件
- VSCODE 插件初探,顺便还有博主的写的背景图插件
- Codevs 1966 乘法游戏
- Visual Studio Code (vscode) 快捷键使用