CODE【VS】2144 砝码称重2(dfs+剪枝)
来源:互联网 发布:java web权限控制框架 编辑:程序博客网 时间:2024/05/15 06:08
题目描述 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<cstdio>#include<algorithm>using namespace std;int n,m,a[31],ans;long long hou[32];bool cmp(int a,int b){return a>b;}void dfs(int flag, int tot, int sum){ if (tot>=ans) return; if (sum==m){ans=tot; return;} for (int i=flag; i<=n; i++) if (sum+a[i]<=m) if (sum+hou[i]<m) return; else dfs(i+1,tot+1,sum+a[i]);}int main(){ scanf("%d%d",&n,&m); for (int i=1; i<=n; i++) scanf("%d",&a[i]); sort(a+1,a+n+1,cmp); for (int i=n; i>=1; i--) hou[i]=hou[i+1]+a[i]; ans=n; dfs(1,0,0); printf("%d\n",ans); return 0;}
0 0
- CODE【VS】2144 砝码称重2(dfs+剪枝)
- codevs 2144 砝码称重 2(搜索+剪枝)
- CODEVS 2144 砝码称重2
- wikioi 2144 砝码称重 2 STL_map
- Wikioi 2144 砝码称重
- 砝码称重 2
- Codevs_P2144 砝码称重 2
- 砝码称重2
- 砝码(01背包问题的DFS剪枝)
- wikioi p2144 砝码称重 2
- 砝码称重(软件大赛)
- wikioi-天梯-提高一等-哈希表-2144:砝码称重2
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 砝码称重
- 页面列表
- \t\t一道笔试题:3、3、8、8四个数怎么得到24
- v8SetNamedPropertyHandler
- \t\t交通服务水平
- restful
- CODE【VS】2144 砝码称重2(dfs+剪枝)
- \t\t小题目
- oracal来源不同表的结果集合并
- 利用word2vec对关键词进行聚类
- \t\t迅雷笔试题
- \t\tundefined reference to 'pthread_create'(转载)
- lucene索引
- \t\tPThread编程手册(转载)
- 【BZOJ 1857】【SCOI 2010】传送带