HDU 5445 Food Problem 2次背包,二进制优化

避坑指南:Abaqus网格划分中90%用户会遇到的5个质量陷阱(附解决方案) 本文深入剖析Abaqus网格划分中90%用户会遇到的5个典型质量陷阱,包括单元扭曲、扫掠网格失败、尺寸梯度控制等,并提供工程级解决方案。通过Python脚本和虚拟拓扑等技巧,帮助用户提升网格质量,确保有限元分析结果的可靠性,适用于CAE工程师和仿真分析师。 阅读详情

题目链接:见这里
题意:首先有n种点心,每种点心的t,u,v代表该点心每个所提供的能量,体积,数量。然后有m中车,每种车的x,y,z代表这种车的容量,费用,数量。又有一个p,问你所选的点心达到p的能量值的时候所需要的最少费用。(点心可以切割,即可以分开到每辆车里面,但是只要你选了一个,就整个点心都要放进车里)

解法:因为点心是可以切割的,所以我们可以分两次dp,第一次先求出要达到p能量的时候需要的最小体积minv,第二次dp求就是要达到minv的的最小费用mincost,显然这就是个两次多重背包,但是我们按照普通的方法拆成01背包,显然复杂度是100*100*1e5显然是会爆炸的对吧,多以我们考虑二进制拆分,那么复杂度可以降为100*log100*50000是可以跑过去的。判断不合法就在第二个dp的时候来判断,这题就完了。开始写进制拆分写智障,WA了3发。

//HDU 5445

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 100010;
struct node{
    int t, u;//能量,体积
    node(){}
    node(int t, int u) : t(t), u(u) {}
}Food[maxn*110], Car[maxn*100];

int dp1[maxn]; //dp1[i]表示能量为i可以达到的最小体积,注意初始化
int dp2[maxn]; //dp2[i]表示费用为i的时候可以达到的最小体积

int T, n, m, p, minv, mincost;

int main()
{
    scanf("%d", &T);
    while(T--){
        scanf("%d%d%d", &n, &m, &p);
        minv = mincost = inf;
        memset(dp1, 0x3f, sizeof(dp1));
        memset(dp2, 0, sizeof(dp2));
        int cnt1 = 0, cnt2 = 0;
        for(int i = 1; i <= n; i++){
            int t, u, v;
            scanf("%d%d%d", &t, &u, &v);
            //二进制拆分
            int k = 1;
            while(k < v){
                Food[cnt1++] = node(k * t, k * u); v-= k; k = k * 2;
            }
            if(v) Food[cnt1++] = node(v * t, v * u);
        }
        //第一次dp得到能达到p能量的最小体积
        dp1[0] = 0;
        for(int i = 0; i < cnt1; i++){
            for(int j = p + 100; j >= Food[i].t; j--){
                dp1[j] = min(dp1[j], dp1[j - Food[i].t] + Food[i].u);
                if(j >= p && minv >= dp1[j]){
                    minv = dp1[j];
                }
            }
        }
        for(int i = 1; i <= m; i++){
            int x, y, z;
            scanf("%d%d%d", &x, &y, &z);
            int k = 1;
            while(k < z){
                Car[cnt2++] = node(k * x, k * y); z -= k; k = k * 2;
            }
            if(z) Car[cnt2++] = node(z * x, z * y);
        }
        //第二次dp找出能达到最小体积的最小费用
        for(int i = 0; i < cnt2; i++){
            for(int j = 50000; j >= Car[i].u; j--){
                dp2[j] = max(dp2[j], dp2[j - Car[i].u] + Car[i].t);
                if(dp2[j] >= minv){
                    mincost = min(mincost, j);
                }
            }
        }
        if(mincost <= 50000) printf("%d\n", mincost);
        else puts("TAT");
    }
    return 0;
}
混合示教长短时记忆网络的车辆轨迹预测研究 论文"混合示教长短时记忆网络的车辆轨迹预测研究"中数据处理及MTF-LSTM模型实现代码,模型在Pytorch框架下实现。 阅读详情

相关推荐

【Clickhouse从入门到精通】第51篇:ClickHouse权限管理体系详解

摘要 本文是ClickHouse权限管理系列文章的第51篇,重点解析ClickHouse RBAC权限体系中的GRANT/REVOKE机制。文章详细介绍了GRANT语句的基础语法与权限类型,包括SELECT、INSERT等常规权限以及WITH GRANT OPTION转授权功能。特别深入讲解了列级权限的实现方式,通过SELECT(col1,col2)语法实现字段粒度的访问控制,并展示了权限查询与验证方法。本文还对比了ClickHouse 20.4版本前后权限管理体系的差异,为构建安全的多租户数据平台提供了关

xyghehehehe的专栏 440

[HDU 5445]Food Problem[多重背包]

题目链接:[HDU 5445]Food Problem[多重背包] 题意分析: 有n种类型的点心,每种提供t的能量,占据u的空间,有v个; 有m种类型的卡车,每种容量x,雇佣花费y,能提供z辆; 点心可以被拆分到不同的车运送,但是必须保证点心的完整,雇佣花费不得超过5e4,问: 提供至少p能量的点心,最少需要花多少钱?否则输出『TAT』。 解题思路: 可以先用多重背包求出满足p能量的

闲停 956

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7585

HDU 5445 Food Problem (2015年长春赛区网络赛I题)

1.题目描述:点击打开链接 2.解题思路:本题利用拆分法+01背包解决,通过题意可以知道,我们需要做2次多重背包,第一次计算出最小的面积,第二次计算出最小费用。然而由于200*100*100=2e6,背包的W值过大,肯定会TLE,因此需要将每个物品按照二进制拆分成logMi个,由于Mi最大只有100,因此拆分后的物品总量最多只有200*log(2,100)=2000个,而且拆分后的物品的能量最少

Skyline 955

ZYNQ平台AXI DMA传输避坑指南:如何快速定位‘errors:200‘等中断故障

本文详细解析了ZYNQ平台AXI DMA传输中常见的'errors:200'等中断故障,提供了从寄存器解析到压力测试的完整解决方案。通过深入分析XILINX_DMA中断机制、错误分类及五步排查法,帮助开发者快速定位并解决DMA传输问题,提升系统稳定性与性能。

weixin_29159613的博客 441

CIC-IDS-2018数据集高效预处理实战:从数据清洗到特征整合

本文详细介绍了CIC-IDS-2018数据集的高效预处理方法,从数据清洗到特征整合的全流程实战。通过内存优化、异常值处理和特征工程等技巧,帮助网络安全研究人员快速处理大规模网络流量数据,提升机器学习模型的训练效率和准确率。特别针对特征数据的预处理提供了实用代码示例和优化建议。

weixin_29274969的博客 502

HDU 5445 Food Problem

题意:有n种糖果,m种箱子,需要的能量为p。每种糖果有它的能量、体积、数量,每种箱子有它的容量、价格、数量,问至少获得p能量的前提下,最少花多少钱 思路:首先可以知道这是一个背包,然后可以求出能量为i的时候最小的体积。如果箱子也这么做的话会超时,因为求出的最小的体积会很大,所以背包空间太大。题目中给出最终的金额不超过50000,所以可以求出当前金额能获得的最大体积,这样扫一遍就知道结果了。 多

黑山老猴妖的专栏 605

content-pipeline:一条可落地的内容生产流水线

content-pipeline 是一种将内容创作工程化的系统性方法,其核心在于用确定性流程替代碎片化人工操作。它基于结构化提示(prompt)、预置叙事框架与品牌参数固化三大原理,实现从素材输入到多平台发布的端到端自动化。技术价值体现在显著降低认知负荷、保障输出一致性、支持本地化资源绑定与闭环反馈校验。典型应用场景包括技术教程批量生成、跨平台(公众号/小红书/即刻)内容适配、AI写作质量可控迭代等。本文深入解析其作为‘内容制造业’基础设施的底层设计逻辑与实操路径,尤其聚焦Claude Code环境下的真实

weixin_31199559的博客 269

HDU 5445 Food Problem 多重背包+二进制优化

据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化。。。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m,p,表示有n种甜品,m种卡车,需要的甜品总能量为p,然后有n行,每行有ti,ui,vi,表示第i种甜品的能量值,体积大小,该种甜品个数。然后有m行,每行有xi,yi,zi,表示第i

一蓑烟雨任平生 420

AUTOSAR 3万字面试题全面解析(持续更新)

ECU抽象层(EAL)是AUTOSAR架构中的一部分,它位于微控制器抽象层(MCAL)之下,但通常与MCAL一起被提及。EAL的目标是提供一个统一的接口来访问和管理ECU(Electronic Control Unit,电子控制单元)的硬件资源,包括处理器、存储器和外围设备。通过这种抽象,EAL使得上层软件能够以一种标准化的方式与ECU硬件交互,而不需要关心具体的硬件实现细节。EAL解决了硬件异构性带来的问题,即不同ECU可能采用不同类型的处理器和硬件配置。

大模型大数据攻城狮的专栏 5611

Modbus协议学习第一篇之基础概念

因工作需要而接触Modbus,正在恶补知识,利用博客的方式来加深理解和记忆,同时希望同行大佬能一起交流。

hzf978742221的博客 881

hdu 5445 Food Problem (多重背包)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5445 题解:一看就像多重背包就是怎么看都不好做。但是这里有点明显的就是有两个背包,一个是糖果一个是箱子,于是不妨就试试两个多重背包,先考虑用这些糖果能否满足条件设dp[i]表示构成能量为i的糖果最小需要多少体积,然后将所需要的体积保存下来那么只要找到一些箱子总共能容纳的体...

awow80285的博客 210

GPFS扩展技术原理(十一)-FMDN广播与EID加解密

GFPS扩展技术原理(十一)FMDN广播及EID加解密

十多年蓝牙协议软件开发,擅长蓝牙协议分析 935

多个多重背包 HDU5445 Food Problem

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:n种甜点,每种都有三个属性(能量,空间,数目),有m辆卡车,每种都有是三个属性(空间,花费,数目)。问至少运输p能量的甜点,花费最小是多少? 分析:直接是两个多重背包,用到了二进制优化的 多重背包最快的方法其实是单调队列优化,但运用单调队列优化需要对容量上限有个限制,这里没...

weixin_30304375的博客 154

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

HDU 5445 Food Problem 两次多重背包

题目描述:Problem Description Few days before a game of orienteering, Bell came to a mathematician to solve a big problem. Bell is preparing the dessert for the game. There are several different types of d

喵头鹰的博客 462

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HDU 5445 Food Problem ACM/ICPC 2015 Changchun Online(二进制优化多重背包)

当时读题的时候就感觉这题很明显的多重背包,但是感觉条件好多就不敢想……         其实,这个只要把问题拆成两个部分就行了。题意就是,每个点心有一定的能量、空间和数量,然后你的要求是使得总的大于p,然后你可以租一些车来运送这些点心,不同的车有不同的价格、容量和数量,问你在满足能量总数大于p的情况下,最小要花费多少。         确实如果看成一个整体去考虑,确实不好dp。于是拆成两个独立的问题,首先,总能量大于p最少需要多少空间,然后对于这个最少的空间,我又需要花费最小多少代价能够把这些东西装完。

alpc_qleonardo 672

HDU 5445 Food Problem(多重背包+二进制优化)

http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:现在你要为运动会提供食物,总共需要提供P能量的食物,现在有n种食物,每种食物能提供 t 能量,体积为 u ,并且最多能提供 v 的数量。运载食物的卡车有m种,每种能提供 x 的运输空间,运输花费为 y,最多可以雇佣 z 辆车。食物可以切割后运输。不需要整块一起运输,但只有一整块全部到达时才能提供能...

weixin_30480651的博客 117

HDU 5445 Food Problem、UVa 10163 Storage Keepers、POJ 3260 The Fewest Coins(两次dp)

Food Problem 题意: 给你n种食物,m种车,每种食物有三种属性能量值t,体积u,数量v。每种车有三个属性值容量x,价格y,数量z。          问题是在能够达到至少p能量的要求下,最小花费为多少,若大于50000则输出TAT  分析: 两次多重背包dp 先dp出至少p能量的最小体积 然后从50000花费再dp出体积 在满足之前的最小体积下找到答案          为

TaoSama's Microcosm 597

hdu 5445 Food Problem 分组背包,二进制拆分

题意:要得到至少p的能量,有n种甜品,每种甜品有能量值t,体积u,数量v,运送这些甜品的卡车有m种,每种有容积x,花费y,数量z。求运送的甜品至少能量达到p的最小花费。p 分析:首先可以算出的到p能量所需的最小体积,在算出得到这个最小体积的最小花费。最小体积可能很大,由于最小花费 #include #include #include #include #include #include #in

Every day 470

HDU 5445 Food Problem

Problem Description Few days before a game of orienteering, Bell came to a mathematician to solve a big problem. Bell is preparing the dessert for the game. There are several different types of des

Occult 522

hdu 5445 Food Problem 多重背包

Food Problem Time Limit: 1 Sec   Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5445 Description Few days before a game of orienteering, Bell came to a m...

weixin_33881753的博客 119

第二届CCPC女生赛 简易题解

前言:2015/5/13用虚拟OJ的方式3人一台电脑打了CCPC女生赛,一共做出9题(共10题),因为自己太坑D题错了9发,罚时爆炸,在现场就只能排第2,上交小姐姐太强啦,很稳。接下来就把做出来的题,写个简易题解,题目在HDU上可以找到,题号对应为6023-6032。A:模拟水题,不说了。B:题意:有n个节点,我们可以选择在每个节点建或不建商店。 对于第i个点,其坐标是a[i].x,建设商店的成本为

I good vegetable a! 1260

CF 387C 贪心

题目链接:这里 题意:就是给处一个长度不超过10^5的十进制正整数, 是按照题目所给的方法从一个数组中拼出来的,为初始的那个数组最多有多少个元素。 解法:从末尾向开头贪心加更大字符串的字符串即可。//CF 387C#include <bits/stdc++.h> using namespace std; const int maxn = 100010; char s[maxn], tmp[max

I good vegetable a! 1056

哈尔滨理工大学第七届程序设计竞赛决赛 题解

比赛链接:https://www.nowcoder.com/acm/contest/30#question A: 在acimo星球, tabris 是一名勇敢的屠龙勇士,在上绿岛屠龙前决定挑选N种装备武装自己,现在每种装备有两个,**但每种装备tabris必须选择拿一个**,**不能多也不能少**。 每件装备有自己的属性值,能给tabris属性加成。 对于不同种类的装备之间有叠加效

I good vegetable a! 915

CF 496E 贪心,排序,set

题目链接:这里 题意:有n首曲子,每首曲子的范围为ai~bi。有m个演奏家,每个演奏家的范围为ci~di,并且可以出演次数为ki次。如果ci<= ai<=bi<=di,则说明该曲子可以由演奏家演出。问是否存在合法方案使得所有曲子都能被演奏。第一行为一个整数表示曲子的数量n,之后n行每行两个整数ai和bi表示这首曲子占的时间范围,然后为一整数m表示演奏家人数,之后m行每行三个整数ci,di和ki分别

I good vegetable a! 766

CF 446B DZY Loves Modification 优先队列

题目链接:这里 题意: 有一个n*m的矩阵,你需要操作k次,每次操作是选择一行或者一列,使得ans+=这一行或者这一列的和 然后再使得这一行或者这一列的数全部减去p 现在问你他操作k次之后,最多获得多少分数解法: 假设你最后操作了k次,那么对于整体的答案,你需要减去i*(k-i)*p这么多(重复的点) 这样我们就把p给处理出来了 现在我们再把行和列都分开,然后用一个优先队列去处理就好了

I good vegetable a! 758

CF 489C Given Length and Sum of Digits... 贪心

题目链接:这里 题意:此题要求找到一对数字,长度和数字之和满足n和m的条件,求出这对数的最大区间。 解法:贪心,让第一个数的首位尽可能小,让最后一个数的首位尽可能大。只能说我开始写的代码巨丑,从test3开始wa到test9,最后推了重新构思一发过了,做题还是得想得非常清楚啊, 不然容易把自己写懵逼。然后要注意特判一些情况。//CF 489C#include <bits/stdc++.h> us

I good vegetable a! 716
上一篇: CF 776E 欧拉函数
下一篇: UVALive 7040 Color 容斥,组合数递推,线形逆元,基础数论
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值