P2347 砝码称重-DP方案数-bitset
- 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的更多相关文章
- 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- P2347 砝码称重
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- P2347 砝码称重(动态规划递推,背包,洛谷)
题目链接:P2347 砝码称重 参考题解:点击进入 纪念我第一道没理解题意的题 ''但不包括一个砝码也不用的情况'',这句话我看成了每个砝码起码放一个 然后就做不出来了 思路: 1.这题数据很小,10 ...
- 洛谷 P2347 砝码称重
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- P2347 砝码称重 (01背包)
题目描述 设有 1g1g1g . 2g2g2g . 3g3g3g . 5g5g5g . 10g10g10g . 20g20g20g 的砝码各若干枚(其总重 ≤1000 \le 1000≤1000 ), ...
- 洛谷P2347 砝码称重 【多重背包】(方案数)(经典)
题目链接:https://www.luogu.org/problemnew/show/P2347 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入 ...
- 洛谷 P2347 砝码称重 & [NOIP1996提高组](dp,枚举)
传送门 解题思路 一看数据范围<1000就坚定了我暴力的决心(不愧是1996年代的题还是t4QAQ) 所以很显然,暴力之中有一点dp的思想,就是把它们像多重背包一样拆分,拆成a1+a2+a3+a ...
- 【题解】Luogu P2347 砝码称重
正经·DP题解 一道非常好的背包练手题( sto(注:原思路来源 SLYZ_0120 的题解)orz 开始这道题 1.输入六个数,存进数组中 2.初始化 f 数组为0. f [ i ] 表示重量为 i ...
- 洛谷 P2347 砝码称重 != codevs 2144
题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝 ...
随机推荐
- 进入页面,根据后台传过来的flag 判断列表隐藏与否
需求描述:页面中有两个列表,一个已添加,一个可以添加,进入页面的时候,如果已添加中有数据则显示,没有数据就隐藏,emmmm,这种需求,我该怎么吐槽嗷嗷嗷 解决思路:让已添加的列表的div默认隐藏,前台 ...
- PHP编译安装时常见错误解决办法
转载自:http://www.bkjia.com/PHPjc/1008013.html This article is post on https://coderwall.com/p/ggmpfa c ...
- java读取pdf和MS Office文档
有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来. 还有一个用于创建PDF文件的项目----iText. PDFBox下面有两个子项目:Font ...
- SQL语法汇总
以下默认为mySQL与SQLsever都能使用SQLsever不能使用的另外标出来了 显示数据库SHOW DATABASES;进入其中一个数据库USE students;显示进入数据库中的所有表SHO ...
- 如果拷贝项目出现各种找不到文件的时候,基本就是没有标记,或者文件名的问题,Could not find resource mybatis.xml,解决方法
Could not find resource mybatis.xml
- Python enumerate() 函数
描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. Python 2.3. 以上版本可用,2. ...
- 使用Bazel构建C/C++项目
目录 前提 基本概念 速查链接汇总 stage1: 一个package, 一个target stage2: 一个package,多个target stage3: 多package,多target st ...
- C#矩阵求逆
来源:http://zhidao.baidu.com/link?url=DiqAbq9YUYn3z7QjxGGoF0PLZwN-Y9ecqKB7Gy38JWRD1riMIYukVKXKq88pxtWL ...
- Centos6中Docker使用中国官方镜像加速
vi /etc/sysconfig/docker 增加如下内容: other_args="--registry-mirror=https://registry.docker-cn.com&q ...
- ASP.NET Core JWT认证授权介绍
using JWTWebApi.Models; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetC ...