P1441 砝码称重

题目描述

现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0)。

输入输出格式

输入格式:

输入文件weight.in的第1行为有两个整数n和m,用空格分隔

第2行有n个正整数a1,a2,a3,……,an,表示每个砝码的重量。

输出格式:

输出文件weight.out仅包括1个整数,为最多能称量出的重量。

输入输出样例

输入样例#1:

3 1
1 2 2
输出样例#1:

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 砝码称重的更多相关文章

  1. 洛谷P1441 砝码称重(搜索,dfs+bitset优化)

    洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求 ...

  2. 洛谷P1441 砝码称重(搜索,dfs+dp)

    洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求 ...

  3. 洛谷 P1441 砝码称重

    题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...

  4. 洛谷P1441 砝码称重 枚举 + 01背包

    显然,n<=20, m<=4 的数据范围一眼爆搜. 直接搜索一下不用哪4个砝码,再做一遍01背包即可. 可能是本人太菜鸡,01背包部分调了半天QAQ-- #include<cstdi ...

  5. 洛谷 P2347 砝码称重

    P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...

  6. 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]

    P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...

  7. 洛谷P2347 砝码称重 【多重背包】(方案数)(经典)

    题目链接:https://www.luogu.org/problemnew/show/P2347 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入 ...

  8. 洛谷 P2347 砝码称重 != codevs 2144

    题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝 ...

  9. 洛谷——P2347 砝码称重

    https://www.luogu.org/problem/show?pid=2347#sub 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输 ...

随机推荐

  1. 代码题(14)— 合并有序链表、数组、合并K个排序链表

    1.21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出 ...

  2. 开发人员需要具备的DBA技术

    背景 在一些小公司或者部门里,通常很少有专门的DBA职位.这时候就需要我们这些程序员充当业余DBA的作用,去监测和维护数据库性能.本文的目的是帮助非DBA专业的开发人员如何定位和解决日常出现数据库问题 ...

  3. Android之Widget学习总结

    1.Widget设计步骤 需要修改三个XML,一个class: 1)第一个xml是布局XML文件(如:main.xml),是这个widget的.一般来说如果用这个部件显示时间,那就只在这个布局XML中 ...

  4. ffmpeg推流命令参数记录

    列出我们本机的设备:ffmpeg -list_devices true -f dshow -i dummy .\ffmpeg -r 25 -f dshow -s 640*480 -i video=&q ...

  5. POJ3565 Ants 和 POJ2195 Going Home

    Ants Language:Default Ants Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7975 Accepted: ...

  6. Tensorflow 数据导入

    导入数据 借助 tf.data API,您可以根据简单的可重用片段构建复杂的输入管道.例如,图片模型的管道可能会汇聚分布式文件系统中的文件中的数据.对每个图片应用随机扰动,并将随机选择的图片合并成用于 ...

  7. DEBUG命令详细说明

    启动DEBUG 1.打开Windows命令窗口 在Windows 95/98的环境中,打开命令窗口的步骤为:点击“开始”→“运行”,输入“command”命令: 在WindowsXP及WIN7的环境中 ...

  8. Android HttpGet和HttpPost设置超时

    HttpPost: private Runnable runnable = new Runnable() { @Override public void run() { String url = Ba ...

  9. 彻底删除kafka下面的topic

    如果只是用kafka-topics.sh的delete命令删除topic,会有两种情况: 如果当前topic没有使用过即没有传输过信息:可以彻底删除 如果当前topic有使用过即有过传输过信息:并没有 ...

  10. CSS 关于文本 背景 边框整理

    文本与字体 1)阴影:text-shadow 格式:text-shadow:5px 5px 3px #FFFFFF分别对应 水平方向 垂直方向 模糊程度 颜色值 代码: <!DOCTYPE ht ...