Codevs 2144 砝码称重 2
2024-08-26 15:19:55
题目描述 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<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 31
int n,ans=0x7fffffff;
long long a[maxn],s[maxn],m;
bool cmp(int x,int y){return x>y;}
long long qread(){
long long i=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>=''){i=i*+ch-'';ch=getchar();}
return i;
}
void dfs(int pos,int cnt,long long sum){
if(sum==m){ans=min(ans,cnt);return;}
if(cnt>=ans)return;
if(pos>n)return;
for(int i=pos;i<=n;i++){
if(s[i]<m-sum)return;
if(a[i]>m-sum)continue;
dfs(i+,cnt+,sum+a[i]);
}
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d",&n);
m=qread();
for(int i=;i<=n;i++)a[i]=qread();
sort(a+,a+n+,cmp);
for(int i=n;i>=;i--)s[i]=s[i+]+a[i];
dfs(,,);
printf("%d",ans);
}
100分 后缀和+剪枝
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
int ans(),w[],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/=;}
else
{
if(m.find(mm - sum)!=m.end())
ans=min(ans,js+m[mm-sum]);
}
for(int i=last;i<r;i++)
dfs(js+,i+,sum+w[i],k);
}
int main()
{
scanf("%d%lld",&n,&mm);
for(int i=;i<n;i++)
scanf("%d",&w[i]);
dfs(,,,true);
dfs(,n/,,false);
printf("%d\n",ans);
return ;
}
100分 meet in the middle
最新文章
- webstorm 10 出现不能run cordova项目
- C#--静态成员的生命周期
- 基于DDD的.NET开发框架 - ABP模块设计
- 用C++实现的SDK跨平台心得体会
- 清除dns缓存
- 【系统移植】Android系统移植
- NP
- BI系统规划前需要准备的6项工作
- ASP.NET制作一个简单的等待窗口
- ##DAY13——可视化编程之XIB
- CSS禁止用户选择复制
- Struts2运行流程-源码剖析
- Basic Data Structure
- es6重点笔记:Symbol,Set,Map,Proxy,Reflect
- js实现点击按钮复制文本功能
- 如何解决make时报错crti. o: unrecognized relocation (0x2a) in section `.init
- [luogu P2319] [HNOI2006]超级英雄
- SSH加密原理、RSA非对称加密算法学习与理解
- CCSprite: fade 效果切换图片
- Linux下profile与bashrc的区别
热门文章
- POJ 1504,ZOJ 2001,UVA 713, Adding Reversed Numbers,错误,已找到错误
- kaggle 欺诈信用卡预测——不平衡训练样本的处理方法 综合结论就是:随机森林+过采样(直接复制或者smote后,黑白比例1:3 or 1:1)效果比较好!记得在smote前一定要先做标准化!!!其实随机森林对特征是否标准化无感,但是svm和LR就非常非常关键了
- vue2.0项目实战使用axios发送请求
- Mysql总结_02_mysql数据库忘记密码时如何修改
- Java之 将程序打包成jar包
- 201621123014《JAVA程序设计》第2周学习总结
- hdu4699 Editor(双向链表或双栈对弹)
- 文件系统(node.js学习笔记)
- ACM学习历程—HDU 5446 Unknown Treasure(数论)(2015长春网赛1010题)
- params 和 query 传参的区别