Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

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

【输入格式】

输入文件weight.in的第1行为有两个整数n和m,用空格分隔 第2行有n个正整数a1,a2,a3,……,an,表示每个砝码的重量。

【输出格式】

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

【数据规模】

对于20%的数据,m=0; 对于50%的数据,m≤1; 对于50%的数据,n≤10; 对于100%的数据,n≤20,m≤4,m<n,ai≤100。

Sample Input1

3 1
1 2 2

Sample Output1

 3

【样例说明】

在去掉一个重量为2的砝码后,能称量出1,2,3共3种重量。

【题解】

这是一个0/1背包+搜索的问题。

先选出m个物品,把他们"去掉“,然后对剩余的物品,进行0/1背包就可以了。

ai<=100,n<=20,则枚举的最大重量为2000;

用一个boolean型的bo数组来表示某一个重量是否能达到。

if (can[j-w[i]])

can[j] = true;

最后统计一下重量的种数就可以了。

【代码】

#include <cstdio>
#include <cstring> int n,m,w[21],ma = 0;
bool bo[21],can[2001]; //bo用来表示哪些砝码可以用,can则表示哪些重量可以由砝码称出 void input_data()
{
scanf("%d%d",&n,&m);
for (int i = 1;i <= n;i++)
scanf("%d",&w[i]);
} void select(int x,int num) //表示当前枚举到了第x个砝码,去掉的砝码数量为num
{
if (num == m) //如果去掉的砝码数量达到了要求,则进行一次0/1背包,求出能到达的重量
{
memset(can,false,sizeof(can));
can[0] = true;
for (int i = 1;i <= n;i++)
if (bo[i])
for (int j= 2000;j>=w[i];j--) //0/1背包是逆序更新的。
if (can[j-w[i]])
can[j] = true;
int xx = 0;
for (int j = 1 ;j <= 2000;j++)
if (can[j]) //统计能够到达的重量数目
xx++;
if (xx > ma)
ma = xx;
return;
}
for (int i = x+1;i <= n;i++) //从x+1开始表示是一个组合问题,从n个中选出m个。
if (bo[i])
{
bo[i] = false;
select(i,num+1);
bo[i] = true;
}
} void get_ans()
{
memset(bo,true,sizeof(bo));
select(0,0);//从0开始,可以包括m==0的情况。
} void output_ans()
{
printf("%d\n",ma);
} int main()
{
freopen("stronger.in","r",stdin);
freopen("stronger.out","w",stdout);
input_data();
get_ans();
output_ans();
fclose(stdin);
fclose(stdout);
return 0;
}

【u204】高级砝码称重的更多相关文章

  1. NOI题库--砝码称重V2(多重背包2^n拆分)

    以前只会写多重背包的原版,渣的不行,为了做此题不得不学习了一下,发现其实也不难,只要理解了方法就好多了(PS:其实和倍增挺像的) 8756:砝码称重V2 总时间限制: 1000ms 内存限制: 655 ...

  2. Codevs No.2144 砝码称重2

    2016-05-31 22:01:16 题目链接: 砝码称重2 (Codevs No.2144) 题目大意: 给定N个砝码,求称出M的重量所需砝码最小个数 解法: 贪心 使砝码数量最小,当然是每个砝码 ...

  3. 安徽省2016“京胜杯”程序设计大赛_A_砝码称重

    砝码称重 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 61 Accepted: 37 Description 小明非常喜 ...

  4. P2347 砝码称重-DP方案数-bitset

    P2347 砝码称重 DP做法 : 转化为 01背包. 进行方案数 更新.最后统计种类. #include<bits/stdc++.h> using namespace std; #def ...

  5. 51nod 1449 砝码称重 (进制思想)

    1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 现在有好多种砝码,他们的重量是 w0,w1,w ...

  6. 51nod 1837 砝码称重【数学,规律】

    题目链接:51nod 1837 砝码称重 小 Q 有 n 个砝码,它们的质量分别为 1 克. 2 克.……. n 克. 他给 i 克的砝码标上了编号 i (i = 1, 2, ..., n),但是编号 ...

  7. P2347 砝码称重

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

  8. Codevs 2144 砝码称重 2

    2144 砝码称重 2  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 有n个砝码,现在要称一个质量为m ...

  9. 洛谷P1441 砝码称重

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

随机推荐

  1. 国内技术管理人员批阅google的“春运交通图”项目

    在整理一份报告的时候,偶然看到2008年春节期间google推出的“春运交通图”项目建设历程报道,很受启发,随以国内的技术管理人员眼光批阅了这篇文章,同时也是自嘲吧. 以下黑色字体是原报道,红色字体是 ...

  2. Maven学习总结(17)——深入理解maven灵活的构建

    一个优秀的构建系统必须足够灵活,应该能够让项目在不同的环境下都能成功构建.maven为了支持构建的灵活性,内置了三大特性,即:属性.profile和资源过滤. 1.maven属性 maven属性分6类 ...

  3. amazeui页面分析3

    amazeui页面分析3 一.总结 1. 本质是list列表,是ul套li的形式,只不过li里面是图片 <li class="am-g am-list-item-desced am-l ...

  4. volatile关键字深入理解

    前言: 这个关键字的重点就三个字,就是可见性.但是面试的时候,你说出可见性三个字,基本上满分100的话,最多只能得到20分.剩下的那80分,就要靠你用硬功夫去获得了. 所谓的硬功夫,其实就是要整明白, ...

  5. 硬件——STM32 , 录音

    战舰V3的录音程序解析 上一章,我们实现了一个简单的音乐播放器,本章我们将在上一章的基础上,实现一个简单的录音机,实现WAV录音.本章分为如下几个部: 50.1 WAV简介 50.2 硬件设计 50. ...

  6. 2、JNI说明

    JNI (Java Native Interface) 1. JAVA调用CLinux是用C语言写的,可以写一个APP简单调用open,read,write来访问驱动程序;Android是用Java写 ...

  7. jQuery常用方法(持续更新) jQuery(转)

    0.常用代码: 请容许我在1之前插入一个0,我觉得我有必要把最常用的代码放在第一位,毕竟大部分时间大家都是找代码的. (1)AJAX请求 $(function() { $('#send').click ...

  8. Linux 下配置 Python IDE——Emacs

    工欲善其事,必先利其器.Python作为高级语言,因为其简介.灵活已经被越来越多的程序员所青睐.在尝试了众多IDE之后,终于找到了自己的挚爱.废话少说,下面开始说一下如何在linux下安装配置Emac ...

  9. goland 2018.2 激活

    感谢 http://blog.sina.com.cn/s/blog_1885d23df0102ydjc.html http://www.3322.cc/soft/38102.html 下载   htt ...

  10. [Angular2 Form] Create custom form component using Control Value Accessor

    //switch-control component import { Component } from '@angular/core'; import { ControlValueAccessor, ...