洛谷OJ: P2347 砝码称重

2人阅读 评论(0) 收藏 举报
分类:

思路:一道多重背包题,之前学习背包问题的时候了解到多重背包可以转换成01背包来做,但是可以通过二进制的思想来优化它,比如13可以拆分成2^0,2^1,2^2,6,这四个数组合可以得到1~13之间的任意整数,那么就把13个物品成功转化为了4个物品,那么这题也是一样的,将a1的个数拆分为2^0,2^1,...,之后当作一道01背包来做

#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;

const int maxn = 1000+10;
const int v[] = {0, 1, 2, 3, 5, 10, 20};
int ans, dp[maxn], n[10], two[20] = {1};
int Max;
vector<int> t;

int main() {
    for (int i = 1; i <= 15; i++) two[i] = 2*two[i-1];
    
    for (int i = 1; i <= 6; i++) {
        cin >> n[i];
        Max += n[i] * v[i];
        for (int j = 0; n[i] >= two[j]; j++) {
            t.push_back(two[j]*v[i]);
            n[i] -= two[j];
        }
        if ( n[i] ) t.push_back(n[i]*v[i]);
    }
    dp[0] = 1;
    for (int i = 0; i < t.size(); i++) {
        for (int j = Max; j >= t[i]; j--) {
            if (dp[j-t[i]]) dp[j] = 1;
        }
    }
    for (int i = 1; i <= Max; i++) 
        ans += dp[i] ? 1 : 0;
    cout << "Total=" << ans << endl;
    return 0;
}

查看评论

有想了解WAV文件格式的吗?看看我绘制的这幅图(重发)

 http://263.csdn.net/FileBBS/files/2001_9/T_548_1.zip           
  • sanjiang
  • sanjiang
  • 2001-09-06 19:25:00
  • 901

青橙OJ A1104. 砝码称重

问题描述   设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重 输入格式   a1 a2 a3 a4 a5 a6   (表示1g砝码有a1个,2g砝码有a2个,…,...
  • u013810072
  • u013810072
  • 2014-09-18 13:36:28
  • 1336

【OJ8756】砝码称重V2,可达性多重背包

砝码称重V2 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重...
  • xym_CSDN
  • xym_CSDN
  • 2015-12-14 20:11:19
  • 457

蓝桥杯 砝码称重 递归 解题报告

5个砝码 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。 如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中...
  • wr132
  • wr132
  • 2015-03-01 17:41:03
  • 1685

洛谷 1441 砝码称重 搜索+DP 解题报告

题目描述现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0)。输入输出格式输入格式:输入文件weight.in的第1行为有两个整数n和m,用...
  • Hawo11
  • Hawo11
  • 2017-10-25 19:37:12
  • 154

称砝码 -动态规划 华为OJ

#include using namespace std; /* 分析:创建一个数组,数组的需要用来标识有可能获得的砝码重量。数组大小为所有砝码重量相加。 哪些需要被标记:...
  • helongfu
  • helongfu
  • 2016-08-24 20:40:05
  • 1545

noip1996 砝码称重 - 提高组 (多重背包)

A1104. 砝码称重 时间限制:1.0s   内存限制:256.0MB   总提交次数:1777   AC次数:588   平均分:47.06 将本题分享到:    ...
  • yuyanggo
  • yuyanggo
  • 2015-08-06 18:39:04
  • 1033

动态规划-砝码称重问题

动态规划(Dynamic Programming)这个词乍一听感觉甚是高大上,初次学习或者使用的时候会感觉难以理解,这是正常的,毕竟凡事都是一回生二回熟。其实它也不难的,大家要明白一个道理,能写到课本...
  • dreamandxiaochouyu
  • dreamandxiaochouyu
  • 2016-09-06 17:14:39
  • 2459

动态规划---砝码称重问题

一、算法分析 动态规划(Dynamic Programming)这个词乍一听感觉甚是高大上,初次学习或者使用的时候会感觉难以理解,这是正常的,毕竟凡事都是一回生二回熟。其实它也不难的,大...
  • u014542643
  • u014542643
  • 2017-10-29 21:14:41
  • 195

1449 砝码称重 51NOD

第一篇博客额 若果你有缘看到这篇博客 是否能动动小手 顶一下呢 ,内容是大帅我上大学来写的代码 其中有的是自己写出来的 有的是看别的博主的博客或者大神讲解 自己写的会把它改为原创,借鉴来的不敢改为原创...
  • qq_38376279
  • qq_38376279
  • 2017-05-31 20:11:09
  • 174
    个人资料
    持之以恒
    等级:
    访问量: 790
    积分: 520
    排名: 9万+
    文章存档