洛谷P1441 砝码称重
P1441 砝码称重
题目描述
现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0)。
输入输出格式
输入格式:
输入文件weight.in的第1行为有两个整数n和m,用空格分隔
第2行有n个正整数a1,a2,a3,……,an,表示每个砝码的重量。
输出格式:
输出文件weight.out仅包括1个整数,为最多能称量出的重量。
输入输出样例
3 1
1 2 2
3
说明
【样例说明】
在去掉一个重量为2的砝码后,能称量出1,2,3共3种重量。
【数据规模】
对于20%的数据,m=0;
对于50%的数据,m≤1;
对于50%的数据,n≤10;
对于100%的数据,n≤20,m≤4,m<n,ai≤100。
/*
看到数据范围那么小,就直接暴力了,但是提高+/省选-的题怎么可能这么好做。。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 25
using namespace std;
int a[maxn],b[maxn],c[maxn],n,m,tot,ans,ansnow;
bool vis[];
void count(int pos,int sum){
if(!vis[sum]&&sum!=){
vis[sum]=;
ansnow++;
}
if(pos==tot+)return;
count(pos+,sum);
count(pos+,sum+c[pos]);
}
void dfs(int pos,int cnt){
if(cnt==m){
memset(vis,,sizeof(vis));
ansnow=;
int num=;
for(int i=;i<=n;i++)
if(b[i]!=-)c[++num]=b[i];
count(,);
ans=max(ans,ansnow);
return;
}
if(pos==n+)return;
if(n-pos+<m-cnt)return;
dfs(pos+,cnt);//不删掉
b[pos]=-;
dfs(pos+,cnt+);
b[pos]=a[pos];
}
int main(){
scanf("%d%d",&n,&m);tot=n-m;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
}
dfs(,);
cout<<ans;
}
60分 暴力TLE
/*
直接爆搜删去哪些砝码,统计方案数的时候用一个01背包就可以了
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 25
using namespace std;
int a[maxn],b[maxn],c[maxn],n,m,tot,ans,ansnow,f[];
void count(){
memset(f,,sizeof(f));
f[]=;
for(int i=;i<=n-m;i++)
for(int j=;j>=c[i];j--)
f[j]+=f[j-c[i]];
for(int i=;i<=;i++)
if(f[i])ansnow++;
}
void dfs(int pos,int cnt){
if(cnt==m){
ansnow=;
int num=;
for(int i=;i<=n;i++)
if(b[i]!=-)c[++num]=b[i];
count();
ans=max(ans,ansnow);
return;
}
if(pos==n+)return;
if(n-pos+<m-cnt)return;
dfs(pos+,cnt);//不删掉
b[pos]=-;
dfs(pos+,cnt+);
b[pos]=a[pos];
}
int main(){
scanf("%d%d",&n,&m);tot=n-m;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
}
dfs(,);
cout<<ans;
}
100分 搜索+dp
洛谷P1441 砝码称重的更多相关文章
- 洛谷P1441 砝码称重(搜索,dfs+bitset优化)
洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求 ...
- 洛谷P1441 砝码称重(搜索,dfs+dp)
洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求 ...
- 洛谷 P1441 砝码称重
题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...
- 洛谷P1441 砝码称重 枚举 + 01背包
显然,n<=20, m<=4 的数据范围一眼爆搜. 直接搜索一下不用哪4个砝码,再做一遍01背包即可. 可能是本人太菜鸡,01背包部分调了半天QAQ-- #include<cstdi ...
- 洛谷 P2347 砝码称重
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- 洛谷P2347 砝码称重 【多重背包】(方案数)(经典)
题目链接:https://www.luogu.org/problemnew/show/P2347 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入 ...
- 洛谷 P2347 砝码称重 != codevs 2144
题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝 ...
- 洛谷——P2347 砝码称重
https://www.luogu.org/problem/show?pid=2347#sub 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输 ...
随机推荐
- Tomcat_总结_02_单机多实例
一.tomcat下载及环境变量配置 1.tomcat下载 下载地址:tomcat官网 2.环境变量配置 只用配置一个CATALINA_HOME就可以了 二.CATALINA_HOME 与 CATALI ...
- guava_学习_00_资源帖
一.精选 1.Google Guava 官方教程 二.参考资源 1.Google Guava官方教程(中文版) 2.使用Guava编写优雅代码 3.Google guava工具类的介绍和使用
- 【Codeforces】Gym 101173B Bipartite Blanket 霍尔定理+状压DP
题意 给一张$n\times m$二分图,带点权,问有多少完美匹配子集满足权值和大于等于$t$ 这里有一个结论:对于二分图$\mathbb{A}$和$\mathbb{B}$集合,如果子集$A \in ...
- codeforces 651A A. Joysticks (模拟)
A. Joysticks time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Android简单数据存储SharedPreferences
SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和St ...
- FFmpeg内存操作(三)内存转码器
相关博客列表 : FFMPEG内存操作(一) avio_reading.c 回调读取数据到内存解析 FFMPEG内存操作(二)从内存中读取数及数据格式的转换 FFmpeg内存操作(三)内存转码器 本文 ...
- BZOJ5324 JXOI2018 守卫
传送门 这是我见过的为数不多的良心九怜题之一 题目大意 给定一段$n$个点构成的折线,第$i$个折点的坐标是$(i,h_i)$,你可以在$i$点放置一个视野,定义$i$能看到$j$当且仅当$i$处有视 ...
- 【Sublime Text 3】编译环境
1.默认编译时总会出现错误 报错: [Finished in 1.3s with exit code 1][cmd: ['gcc', 'V:\\Cynthia\\01.c']][dir: V:\Cyn ...
- arguments对象的实例使用
新年第一记,从这里开始,先来个简单的!去年的知识梳理留下了很多尾巴,原因有很多(知识储量不足,懒了,项目多...) lg:都是借口~ 好吧,我承认,这都是借口,今年一定把尾巴清干净! 下面要写的是 ...
- vmware的双网卡以及Pro的注册码
DC/OS的master需要能够上外网而且能够和本地内网设备交互,于是打算在虚拟机上面做测试,于是调研了一下虚拟机的双网卡配置. 最推荐的方式是使用vmware的station,而不是player ...