当前位置: 首页 > news >正文

POJ 2392 Space Elevator(多重背包 + 倍增优化)

题意:

 用 k 种材料搭建一个梯子,每种材料有高度,数量,最大到达高度等参数限制,求这 k 种材料最多能搭建多高的梯子。

思路:

 多重背包,由于 dp 数组的无后效性,所以要对梯子的最大可到达高度进行从小到达排序,然后再进行多重背包即可。

 

#include <iostream>
#include <algorithm>
using namespace std;

const int MAXN = 410;
const int MAXD = 40010;

struct BlockInfo {
    int h, a, c;
    bool operator < (const BlockInfo& other)
    { return a < other.a; }
} type[MAXN] ;

int dp[MAXD];

void ZeroOnePack(int w, int val, int vol)
{
    for (int v = vol; v >= w; --v)
        dp[v] = max(dp[v], dp[v - w] + val);
}

void CompletePack(int w, int val, int vol)
{
    for (int v = w; v <= vol; ++v)
        dp[v] = max(dp[v], dp[v - w] + val);
}

void MultiplyPack(int w, int val, int num, int vol)
{
    if (w * num >= vol)
    {
        CompletePack(w, val, vol);
        return ;
    }

    int k = 1; 
    while (k <= num)
    {
        ZeroOnePack(w * k, val * k, vol);
        num -= k;
        k <<= 1;
    }
    if (num)
        ZeroOnePack(w * num, val * num, vol);
}

int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i)
        scanf("%d %d %d", &type[i].h, &type[i].a, &type[i].c);

    sort(type, type + n);

    for (int i = 0; i < n; ++i)
    {
        MultiplyPack(type[i].h, type[i].h, type[i].c, type[i].a);

        for (int v = type[i].a; v <= type[n-1].a; ++v)
            dp[v] = dp[type[i].a];
    }

    printf("%d\n", dp[type[n-1].a]);
    return 0;
}

转载于:https://www.cnblogs.com/kedebug/archive/2013/02/06/2908248.html

相关文章:

  • CSS:让IE6/IE7支持display:inline-block
  • 动态
  • CentOS 6.3安装(详细图解教程)
  • 「镁客·请讲」EBER:智能出行和智能健康将成为未来行业发展的最大蓝海!
  • 设计中默认样式的强大威力
  • Javascript是个好东西(广大人民的智慧是无穷的):
  • 【iCore4 双核心板_uC/OS-II】例程十:信号量集
  • SharePoint 2010【PowerShell 系列】应用总结
  • C语言-数组与指针
  • 背水一战 Windows 10 (77) - 控件(控件基类): ContentControl, UserControl, Page
  • VS2010 ASP.NET MVC4 安装失败问题
  • 【Android】Android 4.0 无法接收开机广播的问题
  • Laravel cookie伪造,解密,和远程命令执行
  • 有声似无声
  • 广告联盟变身挂马联盟 HackingTeam漏洞武器袭击百万网民
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 4. 路由到控制器 - Laravel从零开始教程
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • java中的hashCode
  • Laravel5.4 Queues队列学习
  • Linux Process Manage
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • magento 货币换算
  • Making An Indicator With Pure CSS
  • Python 反序列化安全问题(二)
  • Web Storage相关
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端之React实战:创建跨平台的项目架构
  • 三分钟教你同步 Visual Studio Code 设置
  • 问题之ssh中Host key verification failed的解决
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #100天计划# 2013年9月29日
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • ${factoryList }后面有空格不影响
  • (¥1011)-(一千零一拾一元整)输出
  • (1)(1.11) SiK Radio v2(一)
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (汇总)os模块以及shutil模块对文件的操作
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (状压dp)uva 10817 Headmaster's Headache
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • ./和../以及/和~之间的区别
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .Net Core和.Net Standard直观理解
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting