首页 > 其他分享 >二维费用背包问题

二维费用背包问题

时间:2024-07-30 14:51:29浏览次数:7  
标签:费用 背包 int res 二维 include dp

宠物小精灵之收服

题解:设状态 \(dp[i][j][k]\) 表示从前 \(i\) 个物品中选择,物品的费用 \(1\) 为 \(j\),费用 \(2\) 为 \(k\) 的最大选择数量。

则状态转移方程为:

\[dp[i][j][k] = max(dp[i - 1][j][k], dp[i - 1][j - v_1[i]][k - v_2[i]] + 1) \]

跟普通01背包一样,第一维可以直接优化掉。
第一问的答案显然为 \(dp[n][m - 1]\) (注意本题中体力不能为0),第二问的答案枚举满足 \(dp[n][i] = dp[n][m - 1]\) 的最大的 \(m - i\) 即为答案。

AC代码:

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

const int N = 1010;
int dp[N][N];
int v[N], w[N];

void solve() {
    int n, m, k;
    cin >> n >> m >> k;
    for (int i = 1; i <= k; i ++) {
        cin >> v[i] >> w[i];
    }
    
    for (int i = 1; i <= k; i ++) {
        for (int j = n; j >= v[i]; j --) {
            for (int t = m - 1; t >= w[i]; t --) {
                dp[j][t] = max(dp[j][t], dp[j - v[i]][t - w[i]] + 1);
            }
        }
    }
    
    int res = 1e9;
    for (int i = 0; i < m; i ++) {
        if(dp[n][i] == dp[n][m - 1]) {
            res = min(res, i);
            break;
        }
    }
    
    cout << dp[n][m - 1] << " " << m - res << endl;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    solve();
}

标签:费用,背包,int,res,二维,include,dp
From: https://www.cnblogs.com/Ray0430/p/18332398

相关文章

  • 【编码技巧】总结一个稳定而高效的方法,将二维关系数据转换为树形结构
        产品或项目开发过程中,经常遇到一些存在上下级关系的树形结构,但在数据库中存储为二维表关系数据的情况。而前端树形控件又要求按照树形层级组织数据,这就存在一个平铺的关系数据转换为树形层级结构的典型问题。    表结构及二维数据示例(以id,parentid自关联为例):......
  • keycloak~为微信二维码添加动态kc认可的动态state
    本实例将通过keycloak社区登录实现微信二维码的登录,并且二微码不是keycloak动态生成,而是通过微信提供的js生成的,在页面上直接输出的方式实现的。动态state在Keycloak中使用微信二维码登录时,state参数确实是由后端生成的,并且用于确保登录过程的安全性,防止CSRF攻击等。如果你尝试......
  • unity2D游戏开发11游戏背包开发
    背包存放游戏物品的地方在Hiearchy右键UI|Canvas,删除EventSystem,将Canvas重命名为InventoryObject设置属性右键InventoryObject,选择CreateEmpty,重命名为InventoryBackgroun,添加HorizontalLayoutGroup,HorizntalLayoutGroup将自动排列所有子对象,使他们水平......
  • JS 生成二维码
    JS生成二维码:<!DOCTYPEhtml><html><head><metacharset="utf-8"/><metaname="referrer"content="always"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/>......
  • 最高法--1. 质量保修责任的主张系以发包人尽到通知义务为前提;2. 支付维保费用的银行流
    (2020)最高法民终398号  江苏省建设集团有限公司、大庆嘉丽房地产开发有限公司建设工程施工合同纠纷二审民事判决书本院认为,3.关于嘉丽开发公司另行委托施工单位维修费用1483658元问题。由于嘉丽开发公司未能提供充分证据证明其主张的具体维修项目通知过江苏建设公司现场工作......
  • 数学建模--最小费用最大流问题
    目录数学模型算法步骤实现方法应用实例总结最小费用最大流问题的最新求解算法有哪些?在实际应用中,最小费用最大流问题在哪些领域表现最为突出?如何结合最小费用最大流问题和其他运筹学模型以解决更复杂的问题?最小费用最大流问题的求解过程中存在哪些常见问题及其解决方......
  • 开车从襄阳到邓州多远,费用多少钱以及详细线路(返程) 时间:2024-07-27 23:40:58
    开车从襄阳到邓州多远,费用多少钱以及详细线路(返程)时间:2024-07-2723:40:58  编辑:无敌电动网自驾开车从襄阳到邓州的距离大约84.7公里,总耗时约1.6小时,路桥费大约需要30元,如果您开的是汽油车,油费大概51元,如果您开的是新能源车,电费大概在8元~ 17元之间,电费高低取决于您充电......
  • Lua 语法_复杂类型表____数组与二维数组
    复杂数据类型Lua所有的复杂类型都是table(表)数组如何用Luatable(表)实现数组--lua表中没有具体的限制可以是数值,字符串,布尔值a={1,2,3,4,"洛溪",true,nil}--Lua中默认索引从1开始0如果没有自定义索引则为空nilprint(a[0])--#号时用的获取长度的关键字--......
  • 代码随想录 day 37 完全背包 | 零钱兑换 II | 组合总和 Ⅳ | 爬楼梯 (进阶)
    完全背包完全背包解题思路由于我们可以重复放入物体,那么在遍历背包重量时就必须从前往后遍历,因为这样就可以重复放入了,其余的部分和01背包相同知识点完全背包心得学会了如何解决纯完全背白零钱兑换II零钱兑换II解题思路和之前01背包求总数的思路相同,唯一的不同点在......
  • C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
    写在最前,一篇文章学会C语言指针顶级重要,学习C语言最重要的一部分-------指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针文章目录写在最前,一篇文章学会C语言指针第八章指针超详细讲解_指针变量_二维数组指针_指向字符串指针1.指针变量1.1指针变......