首页 > 分享 > 多功能恒温宠物背包的制作方法

多功能恒温宠物背包的制作方法

DP - 二维费用背包 - 宠物小精灵之收服

题意:

小 智 有 n 个 精 灵 球 , m 为 皮 卡 丘 的 体 力 值 , k 为 野 生 小 精 灵 的 数 量 。 小智有n个精灵球,m为皮卡丘的体力值,k为野生小精灵的数量。 小智有n个精灵球,m为皮卡丘的体力值,k为野生小精灵的数量。

输 入 k 个 组 数 据 , 每 组 包 括 收 服 该 小 精 灵 所 需 的 精 灵 球 数 量 C 以 及 该 小 精 灵 的 体 力 值 R 。 输入k个组数据,每组包括收服该小精灵所需的精灵球数量C以及该小精灵的体力值R。 输入k个组数据,每组包括收服该小精灵所需的精灵球数量C以及该小精灵的体力值R。

收 服 每 个 小 精 灵 需 要 花 费 C 个 精 灵 球 , 同 时 皮 卡 丘 的 体 力 值 会 减 去 R 。 收服每个小精灵需要花费C个精灵球,同时皮卡丘的体力值会减去R。 收服每个小精灵需要花费C个精灵球,同时皮卡丘的体力值会减去R。

若 皮 卡 丘 的 体 力 值 小 于 等 于 0 , 则 收 服 失 败 。 若皮卡丘的体力值小于等于0,则收服失败。 若皮卡丘的体力值小于等于0,则收服失败。

现 要 求 在 收 服 小 精 灵 数 量 最 大 的 前 提 下 , 皮 卡 丘 剩 余 的 体 力 值 尽 量 的 大 。 输 出 所 需 花 费 的 精 灵 球 数 量 以 及 皮 卡 丘 剩 余 的 体 力 值 。 现要求在收服小精灵数量最大的前提下,皮卡丘剩余的体力值尽量的大。\输出所需花费的精灵球数量以及皮卡丘剩余的体力值。 现要求在收服小精灵数量最大的前提下,皮卡丘剩余的体力值尽量的大。输出所需花费的精灵球数量以及皮卡丘剩余的体力值。

分析:

将 精 灵 球 数 量 n 和 皮 卡 丘 体 力 值 m 视 作 背 包 的 两 个 容 量 , k 个 小 精 灵 视 作 k 件 物 品 。 将精灵球数量n和皮卡丘体力值m视作背包的两个容量,k个小精灵视作k件物品。 将精灵球数量n和皮卡丘体力值m视作背包的两个容量,k个小精灵视作k件物品。

问 题 转 化 为 : 在 背 包 容 量 V 1 不 超 过 n , V 2 不 超 过 m 的 情 况 下 , 尽 量 从 k 个 物 品 拿 更 多 的 物 品 , 且 V 1 的 余 量 尽 量 大 。 变 成 了 二 维 费 用 背 包 问 题 。 问题转化为:在背包容量V_1不超过n,V_2不超过m的情况下,\尽量从k个物品拿更多的物品,且V_1的余量尽量大。变成了二维费用背包问题。 问题转化为:在背包容量V1​不超过n,V2​不超过m的情况下,尽量从k个物品拿更多的物品,且V1​的余量尽量大。变成了二维费用背包问题。

状 态 表 示 : f [ i ] [ j ] [ k ] : 考 虑 前 i 件 物 品 , 且 体 积 不 超 过 j , 重 量 不 超 过 k , 能 够 选 择 的 物 品 数 量 的 最 大 值 。 状 态 计 算 : ① 、 不 包 含 第 i 个 物 品 : f [ i ] [ j ] [ k ] = f [ i − 1 ] [ j ] [ k ] 。 ② 、 包 含 第 i 个 物 品 : f [ i ] [ j ] [ k ] = f [ i − 1 ] [ j − v 1 [ i ] ] [ k − v 2 [ i ] ] + 1 。 状态表示:f[i][j][k]:考虑前i件物品,且体积不超过j,重量不超过k,能够选择的物品数量的最大值。\状态计算:\①、不包含第i个物品:f[i][j][k]=f[i-1][j][k]。\②、包含第i个物品:f[i][j][k]=f[i-1][j-v_1[i]][k-v_2[i]]+1。 状态表示:f[i][j][k]:考虑前i件物品,且体积不超过j,重量不超过k,能够选择的物品数量的最大值。状态计算:①、不包含第i个物品:f[i][j][k]=f[i−1][j][k]。②、包含第i个物品:f[i][j][k]=f[i−1][j−v1​[i]][k−v2​[i]]+1。

那 么 最 终 精 灵 球 的 最 小 花 费 就 是 f [ k ] [ n ] [ m ] , 皮 卡 丘 消 耗 的 最 小 体 力 值 就 是 满 足 f [ k ] [ n ] [ x ] = f [ k ] [ n ] [ m ] 的 最 小 x , 0 < = x < = m 。 那么最终精灵球的最小花费就是f[k][n][m],皮卡丘消耗的最小体力值就是满足f[k][n][x]=f[k][n][m]的最小x,\0<=x<=m。 那么最终精灵球的最小花费就是f[k][n][m],皮卡丘消耗的最小体力值就是满足f[k][n][x]=f[k][n][m]的最小x,0<=x<=m。

需要注意的是:

皮 卡 丘 的 体 力 值 必 须 严 格 大 于 0 , 因 此 背 包 第 三 维 度 的 最 大 容 量 应 当 是 m − 1 。 皮卡丘的体力值必须严格大于0,因此背包第三维度的最大容量应当是m-1。 皮卡丘的体力值必须严格大于0,因此背包第三维度的最大容量应当是m−1。

同 样 可 以 优 化 到 二 维 , 第 二 层 和 第 三 层 容 量 均 从 大 到 小 循 环 。 同样可以优化到二维,第二层和第三层容量均从大到小循环。 同样可以优化到二维,第二层和第三层容量均从大到小循环。

代码:

#include<iostream> #include<algorithm> using namespace std; const int N=1010,M=510; int n,m,k; int f[N][M]; int main() { cin>>n>>m>>k; for(int i=1;i<=k;i++) { int v1,v2; cin>>v1>>v2; for(int j=n;j>=v1;j--) for(int u=m-1;u>=v2;u--) f[j][u]=max(f[j][u],f[j-v1][u-v2]+1); } cout<<f[n][m-1]<<' '; int pos=m-1; while(pos>0&&f[n][pos-1]==f[n][m-1]) pos--; cout<<m-pos<<endl; return 0; }

1234567891011121314151617181920212223242526272829

相关知识

多功能恒温宠物背包的制作方法
宠物背包的制作方法
一种宠物胸前背包的制作方法
一种宠物的多功能饰品的制作方法
一种多功能的宠物项圈的制作方法
一种宠物背包的制作方法
一种多功能宠物服饰的制作方法
一种宠物携带背包的制作方法
多功能的双肩宠物包
宠物背包

网址: 多功能恒温宠物背包的制作方法 https://m.mcbbbk.com/newsview188840.html

所属分类:萌宠日常
上一篇: 宠物背包.pdf
下一篇: ARKIKA AKCA002 【