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. 对Swoole、Workerman和php自带的socket的理解

    为什么php自带的socket不怎么听说,基本都是用swoole,workerman去实现? 1.PHP的socket扩展是一套socket api,仅此而已. swoole,用C实现,它的socke ...

  2. 小学生都看得懂的C语言入门(4): 数组与函数

    // 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...

  3. cf842C 树形dp+gcd函数

    树形dp用一下就好了 /* dp[i]表示不删节点的gcd值 每个结点开个vector用来存储删一个点之后的最大值 然后排序 去重 */ #include<bits/stdc++.h> # ...

  4. 20165314 2017-2018-2《Java程序设计》课程总结

    20165314 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安 ...

  5. 抓包工具Charles Proxy v4.1.1破解版下载

    移动开发抓包工具Charles Proxy破解版下载 下载Charles Proxy版本,http://charles.iiilab.com/或 https://www.charlesproxy.co ...

  6. https请求抛出异常

    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;// SecurityProtocolType.Tls1.2;

  7. 目标检测算法之YOLOv3

    参考地址:https://blog.csdn.net/leviopku/article/details/82660381 YOLO v3结构图 DBL:卷积+BN+leaky relu,是v3的最小组 ...

  8. 三 os模块

    os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相 ...

  9. C#接口和泛型类

    1.定义: 定义为一个约束,实现接口的类或者结构必须遵守该约定.借口是类之间交互的一个协议.定义了类之间的交互标准. 接口是类之间相互交互的一个抽象,把类之间需要交互的内容抽象出来定义成接口. 接口只 ...

  10. Android Studio Flavors的妙用(转)

    这两天发现Android Studio 的Flavors用起来相当给力!这里跟大家分享下: Flavors中文翻译过来叫“口味”,不知道确切叫法是啥,它的功能就是允许你的APP有多个不同的版本,不同版 ...