背包2讲(2.6)

问题1:装箱问题

题解:这题其实本质上也是01背包,只不过算是变式,要求剩余空间最小值,我们可以转换成最大可以装多少的问题,然后就可以很快的写出题的答案

#include<bits/stdc++.h>
using namespace std;
int v,n;
int w[50];
int dp[20005];
int main()
{scanf("%d%d",&v,&n);for(int i=0;i<n;i++){scanf("%d",&w[i]);}for(int i=0;i<n;i++){for(int j=v;j>=w[i];j--){dp[j]=max(dp[j],dp[j-w[i]]+w[i]);}}printf("%d",v-dp[v]);return 0;
}

问题2:开心的金明 

 

题解:和第一道题一样都属于01背包只不过是一个变式,因此我们还是可以找出其中的关系式

dp[j]=max(dp[j],dp[j-v[i]]+v[i]*w[i])      (i代表第i个物品,j代表钱数为j) 

#include<bits/stdc++.h>
using namespace std;
int n,w1;
int w[30];
int v[30];
int dp[30005];int main()
{scanf("%d%d",&w1,&n);for(int i=0;i<n;i++){scanf("%d%d",&w[i],&v[i]);}for(int i=0;i<n;i++){for(int j=w1;j>=w[i];j--){dp[j]=max(dp[j],dp[j-w[i]]+w[i]*v[i]);}}printf("%d",dp[w1]);return 0;
}

问题3:小A点菜

题解:这题也是很有意思昂,和平常的01背包终于换了个考法了,但仔细思索发现还是那样,所以难度也不是很大,但是需要找到相应的递推关系式dp[j]=dp[j]+dp[j-v[i]];

#include <bits/stdc++.h>
using namespace std;
int n,m;
int v[105];
int dp[10005];int main()
{int flag=0x3f3f3f3f;scanf("%d%d",&n,&m);for(int i=0;i<n;i++){scanf("%d",&v[i]);if(v[i]<flag)flag=v[i];}dp[0]=1;for(int i=0;i<n;i++){for(int j=m;j>=v[i];j--){dp[j]=dp[j]+dp[j-v[i]];}}printf("%d",dp[m]);return 0;
}

 问题4:精卫填海

 

题解:典型的01背包变式,但是我们需要额外设置一个变量,用于更新最小消耗的体力 

只要满足了k(要求的填平所需要的最小体积)就可以更新

#include<bits/stdc++.h>
using namespace std;
int v,n,c;
int k[10005];
int m[10005];
int dp[10005];
int main()
{scanf("%d%d%d",&v,&n,&c);for(int i=0;i<n;i++){scanf("%d%d",&k[i],&m[i]);}int sum=-1;for(int i=0;i<n;i++){for(int j=c;j>=m[i];j--){dp[j]=max(dp[j],dp[j-m[i]]+k[i]);if(dp[j]>=v){sum=max(sum,c-j);}}}if(sum==-1){printf("Impossible");}elseprintf("%d",sum);return 0;
}

 问题5:Bessie's Weight Problem G

 题解,很简单和第1,2题都是一个模版没啥可说的

#include<bits/stdc++.h>
using namespace std;int h,n;
int w[505];
int dp[45005];
int main()
{scanf("%d%d",&h,&n);for(int i=0;i<n;i++){scanf("%d",&w[i]);}for(int i=0;i<n;i++){for(int j=h;j>=w[i];j--){dp[j]=max(dp[j],dp[j-w[i]]+w[i]);}}printf("%d",dp[h]);return 0;
}

问题6:Hay For Sale S

 

题解:很简单的01背包问题,没什么过多解释,找出关系式就好

#include<bits/stdc++.h>
using namespace std;
int w,n;
int v[5005];
int dp[50005];
int main()
{scanf("%d%d",&w,&n);for(int i=0;i<n;i++){scanf("%d",&v[i]);}for(int i=0;i<n;i++){for(int j=w;j>=v[i];j--){dp[j]=max(dp[j],dp[j-v[i]]+v[i]);}}printf("%d",dp[w]);return 0;
}

 总结

做这种动态规划问题,一定要有一个思路,那就是去找动规五部曲

1.明白dp数组含义

2.找到dp关系式

3.给dp数组赋初值

4.遍历顺序

5.打印数组,检查错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456839.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++学习第十六讲---STL常用容器---stack容器,queue容器

一、stack容器&#xff1a; 1.stack基本概念&#xff1a; stack栈容器 stack是一种先进后出的数据结构&#xff0c;它只有一个出口。 栈中只有顶端的元素才能被使用&#xff0c;因此不存在遍历操作。 栈中进数据&#xff1a;入栈 --- push() 栈中出数据&#xff1a;出栈 -…

【UE Niagara】实现物体变形的两种方式

目录 效果 步骤 方式一、通过设置粒子位置 方式二、通过线性力 效果 步骤 方式一、通过设置粒子位置 新建一个Niagara系统&#xff0c;选择Empty模板 这里命名为“NS_Morph” 打开“NS_Morph”&#xff0c;先添加一个“Spawn Burst Instantaneous”模块&#xff0c;“Spa…

用友U8 Cloud ReportDetailDataQuery SQL注入漏洞复现(QVD-2023-47860)

0x01 产品简介 用友U8 Cloud 提供企业级云ERP整体解决方案,全面支持多组织业务协同,实现企业互联网资源连接。 U8 Cloud 亦是亚太地区成长型企业最广泛采用的云解决方案。 0x02 漏洞概述 用友U8 cloud ReportDetailDataQuery 接口处存在SQL注入漏洞,攻击者未经授权可以访…

手撕spring bean的加载过程

这里我们采用手撕源码的方式&#xff0c;开始探索spring boot源码中最有意思的部分-bean的生命周期&#xff0c;也可以通过其中的原理理解很多面试以及工作中偶发遇到的问题。 springboot基于约定大于配置的思想对spring进行优化&#xff0c;使得这个框架变得更加轻量化&#…

【win】vscode无法使用ctrl+shift+p快捷键的解决方案

本文首发于 ❄️慕雪的寒舍 今天使用vscode的时候遇到的这个问题&#xff0c;明明快捷键设置的是ctrlshiftp&#xff0c;但是在电脑上怎么敲都敲不出来&#xff0c;因为用这个快捷键打开命令面板都习惯了&#xff0c;也不想换&#xff0c;就在找原因。 同时百度的时候还遇到了…

vue懒加载请求思路

当页面中不存在分页时&#xff0c;首先考虑到的就是懒加载&#xff0c;所以今天提供一个懒加载的思路。 首先是是么时候应该触发懒加载&#xff0c;以上面页面为例当页面容器中的卡片不能充满屏幕时就会触发加载出新数据&#xff0c;触发前提是1.已获取数据并非全部的。2.上一次…

Vitest 单元测试详解

一、自动化测试&#xff08;TDD&#xff09;的一些概念&#xff1a; 自动化测试&#xff08;TDD&#xff09;概念&#xff1a; 自动化测试是指 使用独立于待测软件的其他软件或程序来自动执行测试&#xff0c;比较实际结果与预期 并生成测试报告这一过程。在测试流程已经确定后…

Python:批量url链接保存为PDF

我的数据是先把url链接获取到存入excel中&#xff0c;后续对excel做的处理&#xff0c;各位也可以直接在程序中做处理&#xff0c;下面就是针对excel中的链接做批量处理 excel内容格式如下&#xff08;涉及具体数据做了隐藏&#xff09; 标题文件链接文件日期网页标题1http://…

C++二维数组

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家好&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习二维数组。 文章目录 1.二维数组的概念与思想 2.二维数组和一维数组的区别 3.二维数组的特点 4.二维数组的操作 1.定义 2.初始化 1.直…

百面嵌入式专栏(面试题)进程管理相关面试题1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍进程管理相关面试题 。 一、进程管理相关面试题 进程是什么?操作系统如何描述和抽象一个进程?进程是否有生命周期?如何标识一个进程?进程与进程之间的关系如何?Linux操作系统的进程0是什么?Linux操…

【Linux】线程Pthread的概念 | NPTL线程库函数

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

假期刷题打卡--Day25

1、MT1204字母三角 请编写一个简单程序&#xff0c;输入正整数n&#xff0c;输出n行F字三角 格式 输入格式&#xff1a; 输入整型 输出格式&#xff1a; 输出n行F字三角 样例 1 输入&#xff1a; 5输出&#xff1a; F FFF FFFFF FFFFFFF FFFFFFFFF 分析过程…