洛谷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), 输入输 ...
随机推荐
- 与STL文件相关的各类学习地址
几个网址: 1.STL :https://en.wikipedia.org/wiki/STL_(file_format)#ASCII_STL 2.一个博客的文章地址: 三维图形数据格式 STL的 读取 ...
- Java_注解_异常_01_ElementType cannot be resolved to a variable
一.异常现象: 自定义注解时, @Retention和@Target都能导入进来,但是却报下列错误: RetentionPolicy cannot be resolved to a variable ...
- Prototype Chain
参考资料: <javascript权威指南 第六版> <javascript高级程序设计 第二版> 写在前面的话 所谓的原型链就是一个一个的对象通过其__proto__属性连接 ...
- leetcode 205. Isomorphic Strings(哈希表)
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- tensorflow训练验证码识别模型
tensorflow训练验证码识别模型的样本可以使用captcha生成,captcha在linux中的安装也很简单: pip install captcha 生成验证码: # -*- coding: ...
- Smooks:xml-to-java
引言: Smooks是一个开源的Java框架,用于处理“数据事件流”.它常常被认为是一个转换框架并以此被用于好几个产品和项目中,包括JBoss ESB(以及其它ESB).然而究其核心,Smooks未提 ...
- Qt Quick之Canvas
QML中的Canvas,俗称画布,它用来定义一个绘图区域,可以使用ECMAScript代码来绘制直线,矩形,贝塞尔曲线,弧线,图片,文字等图元,还可以为这些图元应用填充颜色和边框颜色,甚至还可以进行低 ...
- bzoj 2178 圆的面积并 —— 辛普森积分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2178 先看到这篇博客:https://www.cnblogs.com/heisenberg- ...
- 杂项-协议-HTTP:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
ylbtech-杂项-协议-HTTP:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法 1.返回顶部 1. 请求方法是请求一定的Web页面的程序或用于特定的 ...
- QTP连接数据库
'注意:其中DSN=数据源名:UID=用户名:PWD=用户密码 Dim Conn Set Conn=CreateObject("ADODB.Connection") Const C ...