题目


  • 貌似是某年提高组签到题,六重循环零压力AC,差点怒踩std
  • 但本蒟蒻决定写正解——多重背包,果断20分
  • 原因是写错了状态转移方程。。。神才知道我咋过的样例和两个测试点
  • 扯远了

多重背包

  • 简单说一下多重背包
  • 限制某一些物体个数的背包
  • 可以参考fengzw的背包问题:0-1背包、完全背包和多重背包
  • 这里只说一下二进制拆分
  • 我们要保证可以选出一个物品的所有可能数量
  • 若它有n个,那么从20开始,一直到⌊log2n⌋中,每次以2k分为一组
  • 剩下的n-⌊log2n⌋单独为一组即可
  • 可以证明这种方法正确,在此不再赘述
  • 然后就是一个愉快的01背包

 #include<bits/stdc++.h>

 using namespace std;

 bool dp[];

 int a,weight[]={,,,,,,},tot,v[],ans; 

 inline int read(void){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){
if(ch=='-') f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
x=(x<<)+(x<<)+ch-'';
ch=getchar();
}
return x*f;
} void cf(int x,int y){
for(register int i=;x-i>=;i<<=)
v[++tot]=weight[y]*i,x-=i;
if(x) v[++tot]=weight[y]*x;
} int main(){
for(register int i=;i<=;i++)
a=read(),cf(a,i);
dp[]=;
for(register int i=;i<=tot;i++)
for(register int j=-v[i];j>=;j--)
dp[j+v[i]]|=dp[j];
for(register int i=;i<=;i++)
if(dp[i]) ans++;
printf("Total=%d\n",ans);
return ;
}

毕竟是一个可行性背包大水题,愉快地A了!

洛谷P2347 砝码称重的更多相关文章

  1. 洛谷 P2347 砝码称重

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

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

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

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

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

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

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

  5. 洛谷——P2347 砝码称重

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

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

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

  7. 洛谷 P2347 砝码称重 题解

    每日一题 day12 打卡 Analysis 完全背包 #include<iostream> #include<cstdio> #include<cstring> ...

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

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

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

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

随机推荐

  1. Git 深度学习填坑之旅三(分支branch、远程操作)

    0x01 分支branch依旧借用大表哥(@表元素)的图 很多时候,我们需要建立另一条分支来进行项目的独立开发,当完成后再跟主流回合进行合并这个时候就要启用分支branch功能 git branch ...

  2. C 语言实例 - 一元二次方程

    C 语言实例 - 一元二次方程 求一元二次方程:ax2+bx+c= 的根. 输入三个实数a,b,c的值,且a不等于0. 实例 #include <stdio.h> #include < ...

  3. JavaScript进阶 - 第5章 小程序,大作用(函数)

    5-1什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum;   sum = 3+2; alert(sum);   sum=7+8 ; al ...

  4. 12.创建高级联结---SQL

    一.使用表别名 SQL除了可以对列名和计算字段使用别名,还允许给表名起别名.这样做有两个主要理由: 缩短SQL语句: 允许在一条SELECT语句中多次使用相同的表. SELECT cust_name, ...

  5. Python内建函数二

    内置函数二: 1.lambda (匿名函数) 为了解决一些简答的需求而设计的一句话函数.不需要def来声明. def func(n): return n*n f = lambda n: n*n 注意: ...

  6. Linux操作学习笔记1

    Linux只有一个根目录/,所有的文件和设备都当成是文件进行管理: pwd 打印当前工作目录 (print working directory) whoami ls  列出当前目录面的文件 ls -l ...

  7. GYM 101572I(有向图上最小环)

    逗号空格是假的,全都直接连边就行. 提供一个迪杰n次的图上最小环板子. #include <cstdio> #include <cstring> #include <io ...

  8. Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017) C

    You are given set of n points in 5-dimensional space. The points are labeled from 1 to n. No two poi ...

  9. 树莓派连接启动SSH

    树莓派的官方更新消息发布:http://downloads.raspberrypi.org/raspbian/release_notes.txt SSH禁用的启用方法: 2016年11月25日: * ...

  10. .net创建activex实现摄像头拍照

    using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices ...