P2347 砝码称重

  • DP做法 : 转化为 01背包。 进行方案数 更新。最后统计种类。
  • #include<bits/stdc++.h>
    using namespace std;
    #define maxn 1234
    int n,k,dp[maxn],len,sum,ans;
    int a[11]= {0,1,2,3,5,10,20};
    vector<int>p;
    int main()
    {
    for(int i=1; i<=6; i++)
    {
    scanf("%d",&k);
    for(int j=0; j<k; j++)
    {
    p.push_back(a[i]);
    sum+=a[i];
    }
    }
    dp[0]=1;
    len=p.size();
    for(int i=0; i<len; i++)
    for(int j=sum; j>=p[i]; j--)
    dp[j]+=dp[j-p[i]];
    for(int i=1; i<=sum; i++)
    if(dp[i])ans++;
    printf("Total=%d\n",ans);
    return 0;
    }

      

    bitset 做法 :
    因为 bitset 只能存 00 和 11 ,我们可以让第 ii 位为 11 来表示可以表示出 ii 这个值。
    bitset能对某一位赋值,我们初始定义 Bitset[0]=1Bitset[0]=1,表示可以表示出 00
    当我们加入一个新的砝码的时候,我们将这个砝码加入 bitset ,即进行如下的操作
    Bitset |= Bitset << w[i]Bitset∣=Bitset<<w[i]
    简单理解就是已有的所有能表示出的值都加上 w_iwi​ 再与原集合取并集。
    最后我们统计 bitset 中有多少个 11 即可,可以使用自带函数 Bitset.count()Bitset.count() 完成。

  • #include<bits/stdc++.h>
    using namespace std;
    #define maxn 1234
    int dp[maxn];
    int a[11]= {0,1,2,3,5,10,20};
    bitset<1010>s;
    int main()
    {
    for(int i=1; i<=6; i++)scanf("%d",&dp[i]);
    s[0]=1;
    for(int i=1; i<=6; i++)
    for(int j=0; j<dp[i]; j++)
    s|=s<<a[i];
    printf("Total=%d\n",s.count()-1);
    return 0;
    }

      

P2347 砝码称重-DP方案数-bitset的更多相关文章

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

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

  2. P2347 砝码称重

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

  3. P2347 砝码称重(动态规划递推,背包,洛谷)

    题目链接:P2347 砝码称重 参考题解:点击进入 纪念我第一道没理解题意的题 ''但不包括一个砝码也不用的情况'',这句话我看成了每个砝码起码放一个 然后就做不出来了 思路: 1.这题数据很小,10 ...

  4. 洛谷 P2347 砝码称重

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

  5. P2347 砝码称重 (01背包)

    题目描述 设有 1g1g1g . 2g2g2g . 3g3g3g . 5g5g5g . 10g10g10g . 20g20g20g 的砝码各若干枚(其总重 ≤1000 \le 1000≤1000 ), ...

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

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

  7. 洛谷 P2347 砝码称重 & [NOIP1996提高组](dp,枚举)

    传送门 解题思路 一看数据范围<1000就坚定了我暴力的决心(不愧是1996年代的题还是t4QAQ) 所以很显然,暴力之中有一点dp的思想,就是把它们像多重背包一样拆分,拆成a1+a2+a3+a ...

  8. 【题解】Luogu P2347 砝码称重

    正经·DP题解 一道非常好的背包练手题( sto(注:原思路来源 SLYZ_0120 的题解)orz 开始这道题 1.输入六个数,存进数组中 2.初始化 f 数组为0. f [ i ] 表示重量为 i ...

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

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

随机推荐

  1. django 中session的存储和获取

  2. Android 框架 Afinal使用

    介绍android Afinal框架功能: Afinal是一个开源的android的orm和ioc应用开发框架.在android应用开发中,通过Afinal的ioc框架,诸如UI绑定,事件绑定,通过注 ...

  3. Solver Of Caffe

    本文旨在解决如何编写solver文件. Solver的流程: 1.     设计好需要优化的对象,以及用于学习的训练网络和用于评估的测试网络.(通过调用另外一个配置文件prototxt来进行) 2.  ...

  4. laravel 中CSS 预编译语言 Sass 快速入门教程

    CSS 预编译语言概述 CSS 作为一门样式语言,语法简单,易于上手,但是由于不具备常规编程语言提供的变量.函数.继承等机制,因此很容易写出大量没有逻辑.难以复用和扩展的代码,在日常开发使用中,如果没 ...

  5. Java 一个关于使用&&导致的BUG

    二维数据track的定义: byte[][] track = new byte[10][10]; 本意:判断track[trackY][trackX]的值是否为零,以及trackX是否小于10. 带B ...

  6. golang 打包,交叉编译,压缩

    打包,压缩 我们的常规打包方式 $ go build Mac下我们用 ls -lh查看,可以看到我们打包出来的可执行文件会比较大,一般只写几行代码就回又3M以上的文件大小了. 我们的带压缩的打包方式 ...

  7. vs问题解决:an operation is not legal in the current state

    debug时弹出提示框:内容有:an operation is not legal in the current state 解决方案: Go to Tools > Options > D ...

  8. 如果IDEA右上角的tomcat消失了,解决办法

    看了很多博客都没有找到解决办法,还是老师帮我解决的

  9. JAVA 程序编译过程;编辑器,编译器和解释器

    最基本的软件工具包括,编辑器,编译器,解释器; 编译器:编译器就是将一种编程语言代码翻译成另一种语言的等效代码程序. 解释器:解释器将编译和执行交织在一起,即编译一部分代码后执行该部分代码,然后再编译 ...

  10. 学习笔记: 反射应用、原理,完成扩展,emit动态代码

    using Ruanmou.DB.Interface; using Ruanmou.DB.MySql; using Ruanmou.DB.SqlServer; using Ruanmou.Model; ...