首页 > 其他分享 >动态规划背包问题(01、二维、完全背包)

动态规划背包问题(01、二维、完全背包)

时间:2024-03-15 19:58:19浏览次数:25  
标签:背包 const int namespace dfs 二维 01 spV include

背包问题

01背包

dfs

#include <bits/stdc++.h>
using namespace std;
const int N=1009;
int n,m,v[N],w[N];
int dfs(int x,int spV){//当前枚举到哪个物品,背包剩余容量
	if(x>n)return 0;
	else if(spV<v[x]) return dfs(x+1,spV);
	else return max(dfs(x+1,spV),dfs(x+1,spV-v[x])+w[x]);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
	int ans=dfs(1,m);
	cout<<ans;
	return 0;
}

dfs+记忆化

#include <bits/stdc++.h>
using namespace std;
const int N=1009;
int n,m,v[N],w[N];
int mem[N][N];
int dfs(int x,int spV){
	if(mem[x][spV])return mem[x][spV];
	int sum=0;
	if(x>n)sum= 0;
	else if(spV<v[x]) sum= dfs(x+1,spV);
	else sum= max(dfs(x+1,spV),dfs(x+1,spV-v[x])+w[x]);
	mem[x][spV]=sum;
	return sum;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
	int ans=dfs(1,m);
	cout<<ans;
	return 0;
}

dp (copy dfs)

#include <bits/stdc++.h>
using namespace std;
const int N=1009;
int n,m,v[N],w[N];
int f[N][N];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
	for(int i=n;i>=1;i--)
		for(int j=0;j<=m;j++)
		{
			if(j<v[i])f[i][j]=f[i+1][j];
			else f[i][j]=max(f[i+1][j],f[i+1][j-v[i]]+w[i]);
		}
	cout<<f[1][m];
	return 0;
}

二维背包

dfs

#include<bits/stdc++.h>
using namespace std;
const int N=1009;
int n,V,M;
int v[N],w[N],m[N];
int dfs(int x,int spV,int spM){
	if(x>n)return 0;
	else{
		if(spV<v[x]||spM<m[x])return dfs(x+1,spV,spM);
		else return max(dfs(x+1,spV,spM),dfs(x+1,spV-v[x],spM-m[x])+w[x]);
	}
}
int main(){
	cin>>n>>V>>M;
	for(int i=1;i<=n;i++)cin>>v[i]>>m[i]>>w[i];
	int res=dfs(1,V,M);
	cout<<res;
}

dp

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1009;
ll n,V,M,v[N],w[N],m[N],f[N][110][110];
int main(){
	cin>>n>>V>>M;
	for(int i=1;i<=n;i++)cin>>v[i]>>m[i]>>w[i];
	for(int i=n;i>=1;i--)
		for(int j=0;j<=V;j++)
			for(int k=0;k<=M;k++){
				if(v[i]>j||m[i]>k)f[i][j][k]=f[i+1][j][k];
				else f[i][j][k]=max(f[i+1][j][k],f[i+1][j-v[i]][k-m[i]]+w[i]);
			}
	cout<<f[1][V][M];
}

完全背包

dfs

#include <bits/stdc++.h>
using namespace std;
const int N=1009;
int n,m,v[N],w[N];
int dfs(int x,int spV){
	if(x>n)return 0;
	if(spV<v[x])return dfs(x+1,spV);
	else return max(dfs(x+1,spV),dfs(x,spV-v[x])+w[x]);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
	int res=dfs(1,m);
	cout<<res;
}

dp

#include <bits/stdc++.h>
using namespace std;
const int N=1009;
int n,m,v[N],w[N],f[N][N];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
	for(int i=n;i>=1;i--)
		for(int j=0;j<=m;j++){
			if(j<v[i])f[i][j]=f[i+1][j];
			else f[i][j]=max(f[i+1][j],f[i][j-v[i]]+w[i]);
		}
	cout<<f[1][m];
}

标签:背包,const,int,namespace,dfs,二维,01,spV,include
From: https://blog.csdn.net/2302_79519348/article/details/136748594

相关文章

  • [护网杯 2018]easy_tornado
    [护网杯2018]easy_tornado审题一共有3个界面flag.txtwelcome.txthint.txt通过审题得知,flag位于/flllllllllag中,要使用ssti注入,其加密方式为md5(cookie_secret+md5(filename))知识点tornado模版注入解题看到filehash猜测其为加密后的结果所以应该是修改它。......
  • L2-013 红色警报
    判断图的连通性三种做法,dfs,bfs,并查集。本题dfs。edges为可达矩阵,若i能够到达j,则edges[i][j]=1且edges[j][i]=0反之为0,因为是无向图,所以两个都要存。一开始出了点问题,我在删除那个节点之后,将edges[i][j]置为0,但是没将edges[j][i]=0,郁闷半天...#include<bits/stdc++.h>usin......
  • CTF练习日记——[GXYCTF2019]Ping Ping Ping 1
    首先尝试一下分号有没有被过滤:?ip=127.0.0.1;ls;可以看见分号没有被过滤,看到了flag.php和index.php两个文件,先尝试能不能打开flag.php:?ip=127.0.0.1;catflag.php;能看出空格被过滤了,我们用$IFS$1绕过空格:?ip=127.0.0.1;cat$IFS$1flag.php;可以看见flag也被过滤了,我们打开i......
  • 计讯物联防水型loRa采集终端TG501-B6-8助攻智慧窨井盖解决方案,守护人们足下安全
    政策背景住房和城乡建设部等6部门联合发布《关于加强窨井盖安全管理的指导意见》,意见指出:到2025年年底前,窨井盖安全管理机制进一步完善,信息化、智能化管理水平明显加强,事故风险监测预警能力和应急处置水平显著提升,窨井盖安全事故明显减少。  来源于住房和城乡建设部窨井盖......
  • 立创泰山派学习01--ubuntn系统的WIFI配置
    一、直接命令连接WIFI(1)、使用nmcli指令连接nmclidevicewificonnect"xxxxxx"password"yyyyyy" ifconfig查看网络状态,进展pingbaidu.com测试OK 二、系统自启动WIFI连接(失败)1、烧录立创提供的ubuntu系统镜像2、使用adb进入开发板的ubuntn系统 3、使用nmli......
  • 洛谷题单指南-二叉树-P1030 [NOIP2001 普及组] 求先序排列
    原题链接:https://www.luogu.com.cn/problem/P1030题意解读:已知中序、后序,求先序。解题思路:与洛谷题单指南-二叉树-P1827[USACO3.4]美国血统AmericanHeritage非常类似,不在介绍过程,直接给出代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;stringin,post......
  • 【力扣】目标和(新鲜的01背包题)
    题目描述分析01背包的题做起来最难的是把原问题转化成01背包题,通常需要写出题目中所有的数学关系,对公式进行化简后得到01背包的类型。在这种情景下还需要重新定义dp数组的含义于是连带的。dp数组的递推公式也要重新想大胆的按照五步骤结合题目分析的话其实并不是难到无......
  • 树形DP 01
    树形DP1、没有上司的舞会(选或不选)题目描述某大学有\(n\)个职员,编号为\(1\ldotsn\)。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数\(r_i\),但是呢,如果某个职......
  • 无线电模块ODIN-W263-06B专为物联网网关应用而设计,QN9080-001-M17Y支持蓝牙和NFC的模
    本篇文章主要介绍三款无线模块:无线电模块ODIN-W263-06B专为物联网网关应用而设计,QN9080-001-M17Y支持蓝牙和NFC的模块,RS9116W-DB00-AB1多协议无线模块——明佳达1、ODIN-W2系列:具有Wi-Fi和蓝牙双模式(蓝牙BR/EDR和蓝牙低能耗v4.2)描述:ODIN-W2是一款紧凑而强大的独立多无线电模块......
  • cve-2016-7124 序列化漏洞 php _weakup()
    版本范围php5<5.6.25php7<7.0.10原因魔法函数_weakup调用顺序:_weakup=>unserilize()如果对象属性个数:O:4:"test":3==3大于真是属性个数:3>2,则会跳过_weakup()的执行O:4:"test":3:{s:2:"v1";s:6:"hxdyjx";s:2:"v2";s:3:"1......